Jo, din databas och dina modelldefinitioner ser bra ut, liksom din kod för att lägga till en kategori till en artikel. Din kod för att lägga till en artikel i en kategori är dock lite dålig.
För det första finns det inga $category->articles()
metod. För att komma åt de relaterade objekten använder du din definierade relation:$category->categorizable()
. Även relationsattributet, $category->categorizable
kommer att innehålla det laddade relaterade objektet, och det kommer automatiskt att antingen vara en Article
eller en Service
objekt, beroende på vad som är relaterat.
För det andra är detta morphTo()
sidan av förhållandet; den beter sig som belongsTo()
, och har liknande metoder. Till exempel finns det ingen save()
metoden, men du har associate()
metod. Det betyder att du måste skapa din artikel först och sedan associera den med kategorin. Även associate()
sparas inte automatiskt, så du måste ringa det också.
$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);