Bonjour,
Voila je rencontre un petit problème avec mon code.
J'ai une table categories
:
Schema::create('categories', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->timestamps();
});
J'ai une table projects
avec une table pivot categories_project
Schema::create('projects', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->integer('author_id');
$table->string('name');
$table->longText('description');
$table->string('line');
$table->bigInteger('money');
$table->integer('status')->default(1);
$table->string('picture')->nullable();
$table->string('cdc')->nullable();
$table->timestamps();
});
Schema::create('categories_project', function(Blueprint $table)
{
$table->integer('project_id')->unsigned()->index();
$table->integer('categories_id')->unsigned()->index();
});
Schema::table('categories_project', function(Blueprint $table)
{
$table->foreign('project_id')->references('id')->on('projects')->onDelete('cascade');
$table->foreign('categories_id')->references('id')->on('categories')->onDelete('cascade');
});
Quand j'édite mon projet dans la page édit d'un projet, j'aimerais afficher toutes les catégories et faire un select sur ceux qui sont dans la table categories_project
le problème c'est qu'il me double mais data quand je fais le foreach
Et voici mon foreach:
@foreach($project->categories as $key) // Table categories_project
@foreach($categories as $category) // Table categories
<option {{ setActiveSelect($key->id, $category->id) }} value="{{ $category->id }}">{{ $category->name }}</option>
@endforeach
@endforeach
J'ai une relation dans mon model Project pour accéder à la table categories_project:
public function categories()
{
return $this->belongsToMany(Categories::class);
}
J'aimerais avoir toutes les catégories de la table categories
et j'aimerais avoir les categories en selected pour ceux qui sont dans la table categories_project
Je vous remercie !
Bonjour SoBaDayz,
Ne devrais pas tu d'abord lister toutes les catégories puis marquer celles qui sont dans ta table de pivot, exemple :
@foreach($categories as $category)
<option value="{{ $category->id }}">{{ $category->name }} {{ $post->categories->where('id', $category->id) ? 'selected' : '' }}></option>
@endforeach
@Michaël L.: C'est quoi cette manière de faire des requêtes SQL sur une vue et de plus dans une boucle ?
Ce n'est pas une requête mais une méthode sur un objet de type collection (https://laravel.com/docs/5.7/eloquent-collections).
Toutes les requêtes que tu fais avec Eloquent, te retourne un objet de type collection (ce qui est le cas avec $categories) !