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)