Tout d'abord, une option serait de supprimer votre FavouriteProduct
MAIS conservez le modèle favourite_products
la table. (Ce qui serait ma suggestion).
Ou bien, vous pouvez également modifier le FavourteProduct
de prolonger Pivot
au lieu de Model
et ajouter ->using(FavouriteProduct::class)
aux deux relations favorites sur User
y Product
.
J'ai détaillé les deux approches ci-dessous.
Option 1 : Une relation simple
Si vous optez pour ma première suggestion, vous devrez apporter les modifications suivantes.
Sur votre Product
vous devez ajouter la relation suivante :
public function favouritees()
{
return $this->belongsToMany(User::class, 'favourite_products', 'prd_id', 'usr_id')
->withTimestamps();
}
Sur votre User
vous devez ajouter la relation suivante :
public function favourites()
{
return $this->belongsToMany(Product::class, 'favourite_products', 'usr_id', 'prd_id')
->withTimestamps();
}
Vous pourrez alors ajouter des favoris en procédant comme suit :
$user = User::find($userId);
$product = Product::find($productId);
$user->favourites()->save($product);
Option 2 : un modèle Pivot plus complexe
Il serait préférable que vous n'utilisiez l'option de pivot que si vous avez l'intention d'ajouter des informations et des relations supplémentaires à la base de données. Pivot
relation entre les deux modèles.
Comme ceci sur le Product
modèle
public function favouritees()
{
return $this->belongsToMany(User::class, 'favourite_products', 'prd_id', 'usr_id')->using(FavouriteProduct::class);
}
Comme ceci sur le User
modèle
public function favourites()
{
return $this->belongsToMany(Product::class, 'favourite_products', 'usr_id', 'prd_id')->using(FavouriteProduct::class);
}
Mais je vous suggère de commencer à utiliser une approche plus standard de Laravel ; cela présente de grands avantages, notamment celui de pouvoir suivre les exemples de la documentation lorsqu'on est encore en train d'apprendre.
En utilisant des colonnes telles que usr_id
y prd_id
ne fait aucune différence, à part rendre votre vie plus difficile. Si vous aviez utilisé user_id
y product_id
vous n'aurez pas besoin de les passer à chaque relation pour indiquer à Laravel que vous avez décidé d'utiliser votre convention plutôt que celle de Laravel.
Laravel assumera automatiquement les relations, donc si vous ajoutez un fichier belongsToMany
il examinera la classe sur laquelle il est implémenté, dans ce cas, User::class
et il utilisera automatiquement la clé user_id
. Il examinera également la classe dans la relation, par exemple Product::class
et utiliser le product_id
. À moins, bien sûr, que vous ne lui demandiez d'utiliser quelque chose de spécifique comme vous l'avez fait.
En fin de compte, vous êtes libre de le faire, et il arrive que vous héritiez d'une base de données d'un autre endroit et que vous soyez obligé de le faire.