Mysql
 sql >> Base de données >  >> RDS >> Mysql

Utilisation de relations polymorphes éloquentes pour catégoriser les données dans Laravel

Eh bien, votre base de données et vos définitions de modèle semblent correctes, ainsi que votre code pour ajouter une catégorie à un article. Cependant, votre code pour ajouter un article à une catégorie est un peu décalé.

Premièrement, il n'y a pas de $category->articles() méthode. Pour accéder aux objets associés, vous utilisez votre relation définie :$category->categorizable() . En outre, l'attribut de relation, $category->categorizable contiendra l'objet associé chargé, et il sera automatiquement soit un Article ou un Service objet, selon ce qui est lié.

Deuxièmement, c'est le morphTo() côté de la relation ; il se comporte comme le belongsTo() , et a des méthodes similaires. Par exemple, il n'y a pas de save() méthode, mais vous avez le associate() méthode. Cela signifie que vous devez d'abord créer votre article, puis l'associer à la catégorie. Aussi, associate() n'enregistre pas automatiquement, vous devez donc l'appeler également.

$article = new App\Article();
$article->title = 'This is an article title.';
$article->save();

$category = App\Category::find(1);
$category->categorizable()->associate($article);
$category->save();

// showing use of relationship attribute
$related = $category->categorizable;
echo get_class($related);