Foreach data double

Par SoBaDayz, il y a 7 ans


Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

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

http://prntscr.com/lmdk4p

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); }

Ce que je veux

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 !

3 réponses

Lartak, il y a 7 ans

@Michaël L.: C'est quoi cette manière de faire des requêtes SQL sur une vue et de plus dans une boucle ?

skaro42, il y a 7 ans

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
skaro42, il y a 7 ans

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) !