Laravel France

Table pivot

Avatar de HugoLeuvrey
HugoLeuvrey

Bonjour,

Je réalise un petit projet et j'utilise une table pivot

Je voudrais associer un plat à plusieurs catégories. j'ai donc une table catégorie / plat et la table pivot Cependant je voudrais afficher les bon plats pour chacune des catégories. j'ai donc utiliser les relation BelongToMany:

***Mes models : ***

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Dishs extends Model
{
    protected $table = 'dishs';

    public function Category()
    {
        return $this->belongsToMany('App\Category', 'category_dishes', 'category_id', 'dish_id');
    }
}
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
    protected $table = 'categories';


        public function Dishes()
    {
        return $this->belongsToMany('App\Dishs', 'category_dishes', 'dish_id', 'category_id');
    }
}

Ma base de données :

public function up()
{
    Schema::create('categories', function (Blueprint $table) {
        $table->id();
        $table->string("id_restaurant");
        $table->string("name");
        $table->string("icon");
        $table->timestamps();
    });
}

    public function up()
{
    Schema::create('dishs', function (Blueprint $table) {
        $table->id();
        $table->string("id_restaurant");
        $table->string("name");
        $table->string("price");
        $table->string("description");
        $table->string("image");
        $table->timestamps();
    });
}


public function up()
{
    Schema::create('category_dishes', function (Blueprint $table) {
        $table->id();
        $table->string("category_id");
        $table->string("dish_id");
        $table->timestamps();
    });
}

et j'ai mis cela dans mon controller :

 $dish_by_category = Category::with('Dishes')->get();
  dd($dish_by_category);
  

mais cela donne cela :

Illuminate\Database\Eloquent\Collection {#304 ▼
 #items: array:4 [▼
   0 => App\Category {#317 ▶}
   1 => App\Category {#318 ▶}
   2 => App\Category {#319 ▼
     #table: "categories"
     #connection: "mysql"
     #primaryKey: "id"
     #keyType: "int"
     +incrementing: true
     #with: []
     #withCount: []
     #perPage: 15
     +exists: true
     +wasRecentlyCreated: false
     #attributes: array:6 [▶]
     #original: array:6 [▶]
     #changes: []
     #casts: []
     #classCastCache: []
     #dates: []
     #dateFormat: null
     #appends: []
     #dispatchesEvents: []
     #observables: []
     #relations: array:1 [▼
       "Dishes" => Illuminate\Database\Eloquent\Collection {#321 ▼
         #items: []
       }
     ]
     #touches: []
     +timestamps: true
     #hidden: []
     #visible: []
     #fillable: []
     #guarded: array:1 [▶]
   }
   3 => App\Category {#320 ▶}
 ]
}

je ne sais pas pourquoi Dish est vide... ll y a bien des données dans ma table pivot... Si vous pouviez m'aider

Merci !

Posté il y a 4 mois
Avatar de FelixTachi
FelixTachi

as tu importer ceci "Illuminate\Database\Eloquent\Collection" dans le controller?

Posté il y a 4 mois
Avatar de bestmomo
bestmomo

Salut,

Je pense que tes clés étrangères ne sont pas du bon type, d'autre part tu n'as pas le référencement des clés pour la base, fais plutôt ainsi :

public function up()
{
    Schema::create('category_dishes', function (Blueprint $table) {
        $table->id();
        $table->foreign('category_id')->references('id')->on('categories');
        $table->foreign('dish_id')->references('id')->on('dishes');
        $table->timestamps();
    });
}
Posté il y a 4 mois
Avatar de HugoLeuvrey
HugoLeuvrey

Bonjour, Merci pour vos réponse

Je viens de faire l'importation dans mon controller et c'est toujours vide.

Si elle ne sont pas du bon type cela est juste une erreur de convention non ? la je viens de refresh toute mes tables mais je comprend pas ce qui se passe...

Il y a des catégories ou il y a bien 1 plat, mais d'autres c'est vide et quand il y devrais y en avoir plusieurs il y en a que 1 seul egalement

Posté il y a 4 mois

Vous ne pouvez pas répondre à ce sujet.