Oznámení
Vložení entity do vazby belongsToMany neuložené entitě
před 5 lety
- Filip111
- Člen | 244
Mám entitu Order, např.:
<?php
/*
* @property int $id
* @property OrderItems[] $items m:belongsToMany(order_id:eshop_orders_items)
*/
class Order extends BaseEntity { }
?>
Entita Order zatím není uložená, ale chtěl bych si ji připravit, tedy
do $items přiřadit řádky objednávky, nastavit platbu, dopravu a další,
celé to předat fasádě, která se postará o uložení.
Fasádě by mělo být jedno, jestli je objednávka uložená či nikoliv –
zkrátka projde celou objednávku + řádky a uloží co bude potřeba, pošle
maily atd.
Problém je, že pokud entita Order není uložená, nemůžu jí do property
$items přiřadit řádky. Končí to chybou
Missing entity factory in Order
.
Šlo by to nějak vyřešit nebo obejít? (případně jestli na to máte
jiný názor)
První se samozřejmě nabízí entitu Order hned uložit, ale to v tomto okamžiku nechci. Je to v místě, kde se se objednávka teprve připravuje, kontroluje apod. a v případě nějakého problému ji nechci ukládat.
Díky.
před 5 lety
- Šaman
- Člen | 2275
Tohle je nevýhoda LM, resp. jeho těsné vazby na databázi. LM tyhle věci
dělá přes $row
, proto ji potřebuje. Narazil jsem na to
i v případě, že jsem chtěl entitu (z pohledu ER diagramu), která ale
nebyla v databázi.
Kdyby se tohle mělo vyřešit bez nutnosti ukládání, tak by se musela
připsat kompletní vrstva, která hlídá vazby a konzistenci už na úrovni
objektu. Tu LM nemá (zároveň je to jeho výhoda – je malý a přitom
stačí na 85% problémů). Všechno řeší pomocí databáze.
P.S. V ORM nad NDb to bude, předpokládám, stejné. A v YetORM taky. Jsou to poměrně jednoduché nástroje jak dostat z databáze objekty a jak objekty do databáze ukládat. Pokud by ti tohle moc vadilo, potřeboval bys velké ORM (Doctrine, ORM od Petra Procházky), kde jsou entity nezávislé na úložišti. Jsou to ale výrazně rozsáhlejší nástroje a z toho plyne i nutnost daleko větších znalostí o tom konkrétním nástroji a postupech.
Editoval Šaman (8. 11. 2014 14:02)
před 5 lety
- Filip111
- Člen | 244
Dík za objasnění.
Je to trochu škoda, do entity pak nejde zapouzdřit některá logika a musí
se to řešit ve vyšší vrstvě.
A i tam se to komplikuje, protože nemůžu předat jeden objekt k uložení,
ale musím ho rozpadnout na hlavičku, řádky a další související data tam
postupně uložit a pospojovat dohromady.
S Doctrine pracuju na jednom projektu – je to ale reportovací systém, takže tohohle zásadního rozdílu, jsem si zatím nevšiml.