Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Verwenden von eloquenten polymorphen Beziehungen zum Kategorisieren von Daten in Laravel

Nun, Ihre Datenbank und Ihre Modelldefinitionen sehen gut aus, ebenso wie Ihr Code zum Hinzufügen einer Kategorie zu einem Artikel. Ihr Code zum Hinzufügen eines Artikels zu einer Kategorie ist jedoch etwas daneben.

Erstens gibt es kein $category->articles() Methode. Um auf die zugehörigen Objekte zuzugreifen, verwenden Sie Ihre definierte Beziehung:$category->categorizable() . Auch das Beziehungsattribut $category->categorizable enthält das geladene verwandte Objekt und ist automatisch entweder ein Article oder ein Service Objekt, je nachdem was verwandt ist.

Zweitens ist dies das morphTo() Seite der Beziehung; es verhält sich wie belongsTo() , und hat ähnliche Methoden. Beispielsweise gibt es kein save() Methode, aber Sie haben die associate() Methode. Das bedeutet, dass Sie zuerst Ihren Artikel erstellen und ihn dann mit der Kategorie verknüpfen müssen. Auch associate() speichert nicht automatisch, also müssen Sie das auch aufrufen.

$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);