Mysql
 sql >> Database >  >> RDS >> Mysql

Utilizzo di relazioni polimorfiche eloquenti per classificare i dati in Laravel

Bene, il tuo database e le definizioni del tuo modello sembrano a posto, così come il tuo codice per aggiungere una categoria a un articolo. Tuttavia, il tuo codice per l'aggiunta di un articolo a una categoria è leggermente errato.

Innanzitutto, non esiste $category->articles() metodo. Per accedere agli oggetti correlati, usi la tua relazione definita:$category->categorizable() . Inoltre, l'attributo di relazione, $category->categorizable conterrà l'oggetto correlato caricato e sarà automaticamente un Article o un Service oggetto, a seconda di ciò che è correlato.

Secondo, questo è il morphTo() lato della relazione; si comporta come belongsTo() , e ha metodi simili. Ad esempio, non esiste save() metodo, ma hai il associate() metodo. Ciò significa che devi prima creare il tuo articolo e poi associarlo alla categoria. Inoltre, associate() non salva automaticamente, quindi devi chiamare anche quello.

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