Bonjour,

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

J'ai stocké dans une table produits une foreign key avec un id de catégorie (j'ai une table avec toutes mes catégories).
Lorsque j'affiche mes produits, j'essaye donc de récuperer les données de la catégorie associée avec le système des eloquents et relations (à la manière de la vidéo proposée par grafikart).

Cependant, aucune données n'est retournée lorsque que j'essaye d'appeler les données de catégories

Voici mes données :

App\Products :

class Products extends Model
{
    public function categories(){
        return $this->belongsTo('App\Categories');
    }
}

App\Categories :

class Categories extends Model
{
    public function products(){
        return $this->hasMany('App\Products');
    }
}

ProductsController :

public function index()
    {
        $renderProducts = Products::latest()->with('categories')->paginate(6);
        return view('produits.index', compact('renderProducts'));
    }

View :

 @foreach($renderProducts as $product)
            <div class="card-content">
              @if($product->categories)
                  <p>{{$product->categories->name}}</p>
              @endif
        </div>
@endforeach

Valeurs Tinker :

$product = App\Products::find(1)
=> App\Products {#729
     id: 1,
     title: "zzzz",
     description: "fzfzfezf",
     price: 33,
     created_at: "2017-05-26 15:57:30",
     updated_at: "2017-05-26 15:58:58",
     picture_url: "8484812.jpg",
     user_id: 1,
     categorie_id: 8,
   }
>>> $product->categories()
=> Illuminate\Database\Eloquent\Relations\BelongsTo {#717}
>>> $product->categories()->associate($product)
=> App\Products {#729
     id: 1,
     title: "zzzz",
     description: "fzfzfezf",
     price: 33,
     created_at: "2017-05-26 15:57:30",
     updated_at: "2017-05-26 15:58:58",
     picture_url: "8484812.jpg",
     user_id: 1,
     categorie_id: 8,
     categories_id: 1,
     categories: App\Products {#729},
   }

Pas d'erreur survenue au niveau de mon code. Si quelqu'un a une piste pour m'aider à avancer, je vous remercie.

3 réponses


Bonsoir,
as-tu essayé

$renderProducts = Products::with('categories')->latest()->paginate(6);

Je vois que tu n'as pas nommé tes Model de manière conventionnelle, ça peut jouer ! Il faut que ce soit au singulier, donc Product, Categorie...
J'avais eu un problème du genre, en corrigeant ça avait fonctionné.

@Lepe +1

@Eva Sellal Essayes, dans la mesure du possible, de respecter les conventions de nommage : un modèle doit être au singulier et commencer par une Majuscule. La table doit être au pluriel et en lowercase. Je te conseille de regarder la formation consacrée à Laravel, il parle des conventions de nomamge pour Laravel.
Sinon, si tu veux garder tes modèles nommés ainsi, précise pour chacun à quelle table il fait référence (ex. protected $table = 'categories') ;)