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


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