sql >> Base de Datos >  >> RDS >> Mysql

Uso de relaciones polimórficas Eloquent para categorizar datos en Laravel

Bueno, su base de datos y las definiciones de su modelo se ven bien, así como su código para agregar una categoría a un artículo. Sin embargo, su código para agregar un artículo a una categoría está un poco mal.

Primero, no hay $category->articles() método. Para acceder a los objetos relacionados, utiliza su relación definida:$category->categorizable() . Además, el atributo de relación, $category->categorizable contendrá el objeto relacionado cargado, y automáticamente será un Article o un Service objeto, dependiendo de lo que se relacione.

En segundo lugar, este es el morphTo() lado de la relación; se comporta como belongsTo() , y tiene métodos similares. Por ejemplo, no hay save() método, pero tiene el associate() método. Esto significa que primero debe crear su artículo y luego asociarlo con la categoría. Además, associate() no se guarda automáticamente, por lo que también debe llamar a eso.

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