NDB – LEFT JOIN nad subquery
- kolsi
- Člen | 131
Ahoj, je nějaká možnost, jak následující SQL dotaz přepsat do Nette Database?
SELECT
`sales_order`.*,
SUM(`sales_order_item`.`amount_dispatched`) AS dispatched,
SUM(t.`amount`) AS invoiced
FROM `sales_order`
LEFT JOIN `sales_order_item` ON `sales_order`.`id` = `sales_order_item`.`order_id`
LEFT JOIN (
SELECT item_id, SUM(amount) AS amount
FROM `sales_order_item_invoice`
GROUP BY item_id
) t ON `sales_order_item`.`id` = t.`item_id`
GROUP BY `sales_order`.`id`
Problém mám hlavně s tím SELECTem ve druhém joinu.
this->connection->table('sales_order')
->select('sales_order.*')
->select('SUM(:sales_order_item.amount_dispatched) AS dispatched')
-> ... ???
Pokud bych přidal:
->select('SUM(:sales_order_item:sales_order_item_invoice.amount) AS invoiced')
tak to sice vytvoří funkční dotaz, ale SUM dispatched je spočítáno špatně.
- Svaťa Šimara
- Člen | 98
OT:
@CZechBoY V Doctrně ano, NativeQuery a buď hydratace skaláru nebo ruční mapování
- Svaťa Šimara
- Člen | 98
@CZechBoY Asi zas dostanu strašně pozitivní hodnocení, ale opravdu si myslím, že ORM řeší mapping…
- Napíšu hyperoptimalizovanou Query (jednu query), klidně na míru databázovému serveru
- Řeknu ORM, jak má mapovat
- ORM mi vrací objekty podle mapování
Mám za to, že v tomto případě ORM udělá přesně tu práci, na kterou je stavěné – mapuje výsledky dotazu na objekty. Vlastně si myslím, že toto je nejčistější (myšleno bez veškerého balastu okolo) použití ORM.
edit:
QueryBuilder a podobné nástroje jsou pouhé pomůcky, lze bez nich žít a ORM
bude pořád dávat perfektní smysl.
Editoval Svaťa Šimara (10. 3. 2017 23:26)