Jak udělat join a sum v NotORM
- kloban
- Člen | 123
Ahoj, chci se zeptat jak pomocí NotORM zapsat tento SQL dotaz. Nějak jsem
nepochopil jak dělat ty joiny a sum. Bez těch joinů by se to ale obešlo
díky cizím klíčům, že?
Ty cizí klíče jsou pro mě ještě taková trochu záhada…
Díky Dan
Select sum(cena) from jidelniListek join objednavka_jidelniListek ON jidelniListek.id = objednavka_jidelniListek.id_jidelniListek
join objednavka on objednavka.id = objednavka_jidelniListek.id_objednavka
where objednavka_jidelniListek.id_objednavka = 28;
- tomas.lang
- Člen | 53
Ahoj,
trochu se zde motají pojmy NotORM a Nette\Database – NDb sive vychází z NotORM, ale liší se např. syntaxí (či spíše API), v Nette 2.1 je tam těch změn pak již více.
Cizí klíče jsou pro NdB důležité aby poznal přes co má JOINovat (pokud nepoužiješ jako reflexi Nette\Database\Reflection\ConventionalReflection, pak se očekává konkrétní konvence při pojmenování sloupců a tabulek.
Pokud budeme přepokládat, že budeš mít v DB nastavené vizí klíče (neboť od pohledu se tvá struktura neshoduje s ConventionalReflection), pak by dotaz mohl vypadat následovně:
<?php
$database->table('jidelniListek')
->where('objednavka_jidelniListek:id_objednavka', 28)
->sum('cena');
?>
Dotaz je psaný pro Nette 2.0.x, u 2.1 by tam byla změna u té where podmínky na where(‚:objednavka_jidelniListek.id_objednavka‘, 28).
Sloupeček cena
nevím odkud máš braný, pokud je z té
tabulky objednavka
, tak by ještě byla změna v té metodě sum()
na sum(‚objednavka_jidelniListek:objednavka.cena‘) (opět psáno pro Nette
2.0.x).
Místo print_r($this->database->table(‚objednavka‘)->dump()); zkus použít print_r($this->database->table(‚objednavka‘)->getSql());
Pro podrobnější informace bych případně odkázal na následující video: http://www.youtube.com/watch?….
Editoval tomas.lang (15. 3. 2014 15:40)
- kloban
- Člen | 123
Díky za video.
Potřebuju propojit celkem 3 tabulky a nedaří se. Prosím tedy ještě
o radu, příkládám erd (http://moje.schoula.cz/erd.png).
Potřebuji vlastně vypsat všechny nezaplacené položky z jídelního lístku, které patří k určité objednávce. Nakonec potřebuju znát celkovou sumu cen.
A nakonec se ještě zeptám. Co jsem tak četl, tak všichni na Nette/Database spíše nadávají. Má cenu se to tedy učit, nebo rovnou začít používat Doctrinu. Na druhou stranu jestli je Doctrina na pochopení obtížnější, tak bude asi lepší na ni přejít později, co myslíte?