sql >> Databáze >  >> RDS >> Mysql

Použití výmluvných polymorfních vztahů ke kategorizaci dat v Laravelu

Vaše databáze a definice modelů vypadají dobře, stejně jako váš kód pro přidání kategorie do článku. Váš kód pro přidání článku do kategorie je však trochu mimo.

Za prvé, neexistují žádné $category->articles() metoda. Pro přístup k souvisejícím objektům použijte svůj definovaný vztah:$category->categorizable() . Také atribut vztahu, $category->categorizable bude obsahovat načtený související objekt a automaticky to bude buď Article nebo Service objekt, v závislosti na tom, co souvisí.

Za druhé, toto je morphTo() strana vztahu; chová se jako belongsTo() a má podobné metody. Například neexistuje žádné save() metodu, ale máte associate() metoda. To znamená, že musíte nejprve vytvořit svůj článek a poté jej přiřadit ke kategorii. Také associate() se automaticky neukládá, takže to musíte také zavolat.

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



  1. Průvodce návrhem databáze pro kvíz v MySQL

  2. TransactSQL ke spuštění jiného skriptu TransactSQL

  3. Další způsob zobrazení automatických aktualizací statistik

  4. Jak zakázat index v innodb