Cóż, twoja baza danych i definicje modeli wyglądają dobrze, podobnie jak kod dodawania kategorii do artykułu. Jednak Twój kod dodawania artykułu do kategorii jest trochę niepoprawny.
Po pierwsze, nie ma $category->articles()
metoda. Aby uzyskać dostęp do powiązanych obiektów, użyj zdefiniowanej relacji:$category->categorizable()
. Również atrybut relacji, $category->categorizable
będzie zawierać załadowany powiązany obiekt i automatycznie będzie to Article
lub Service
obiekt, w zależności od tego, co jest powiązane.
Po drugie, jest to morphTo()
strona związku; zachowuje się jak belongsTo()
i ma podobne metody. Na przykład nie ma save()
metody, ale masz associate()
metoda. Oznacza to, że najpierw musisz utworzyć swój artykuł, a następnie powiązać go z kategorią. Również associate()
nie zapisuje automatycznie, więc musisz to również wywołać.
$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);