Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Usando relacionamentos polimórficos Eloquent para categorizar dados em Laravel


Bem, seu banco de dados e suas definições de modelo parecem boas, assim como seu código para adicionar uma categoria a um artigo. No entanto, seu código para adicionar um artigo a uma categoria está um pouco errado.

Primeiro, não há $category->articles() método. Para acessar os objetos relacionados, você usa seu relacionamento definido:$category->categorizable() . Além disso, o atributo de relacionamento, $category->categorizable conterá o objeto relacionado carregado e será automaticamente um Article ou um Service objeto, dependendo do que está relacionado.

Segundo, este é o morphTo() lado da relação; ele se comporta como o belongsTo() , e tem métodos semelhantes. Por exemplo, não há save() método, mas você tem o associate() método. Isso significa que você precisa criar seu artigo primeiro e depois associá-lo à categoria. Além disso, associate() não salva automaticamente, então você precisa chamar isso também.
$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);