Nextras\ORM mazaní vazeb typu m:m

TOMeek
Člen | 64
+
0
-

Ahoj,
v mém bádání v Nextras\ORM jsem narazil ještě na jednu věc, které mi není úplně jasná.
Mám vazbu m:m. Konkrétně něco podobného:

/**
 * Item
 *
 * @property int                    $id                    {primary}
 * @property string                 $name
 * @property string|null            $slug
...
 * @property ManyHasMany|Category[] $categories		  {m:m Category::$items, isMain=true}
 */
class Item extends Entity
{
}

A k kategorie:

/**
 * Category
 *
 * @property int                   $id             	{primary}
 * @property Category|null         $parent         	{m:1 Category::$categories}
...
 * @property OneHasMany|Category[] $categories		{1:m Category::$parent}
 * @property ManyHasMany|Item[]    $items			{m:m Item::$categories}
 */
class Category extends Entity
{
}

K tomu mám tabulku items_x_categories a provázání funguje dobře. Nyní ale řeším situaci, kdy potřebuju vymazat kategorii a ktomu vazbu z items_x_categories, ale produkt nechat. Když mažu kategorii i produkt, tak se vazba vymaže, ale nevím jak docílit toho, že produkt má více kategorií, ale když mažu jednu kategorii, tak jí vymažu z databéze a potřebuju smazat provázání, ale ne samotný produkt. Na to jsem zatm nedošel. Může mi někdo prosím poradit?

David Matějka
Moderator | 6445
+
0
-

ahoj, smazes to volanim remove na relationship $item->categories, viz doc https://nextras.org/…elationships#…

TOMeek
Člen | 64
+
0
-

ahoj, tak se tady stím peru průběžně přes den a nějak se mi nedaří :(. Po $item->categories->remove($category) se má spouštět ještě nějaké flush()? Protože kód projde podezřele optimisticky, ale databáze se na to tváří jinak.

David Matějka
Moderator | 6445
+
0
-

ano, musis pote persistnout tu item (pripadne category) a flushnout viz testy

TOMeek
Člen | 64
+
0
-

Jo ahááá, už jsem to pochopil. Jak jsem používal celou dobu NDB tak tam jsem to žešil pro každou db vlastní repository a na tohle chápání si musím zvyknout. Díky za rady už jsem to přemohl :-)

hrach
Člen | 1838
+
+1
-

Jinak prosim (info i pro ostatni), oficialni podpora je GitHub/Slack Pehapeckari – Nextras channel :)