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