Nette řazení podle dvou cizích tabulek

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
David Klouček
Člen | 57
+
0
-

Mám tabulky category a product. U podkategorie je nastavenej sloupec parent_id, kde odkazuje na nadřazenou kategorii. Já mam výpis výrobků a potřebuju ho seřadit nejprve podle názvu hlavní kategorie a pak podkategorie, aby se v tom líp hledalo, vypisuju to ve formátu:

název produktu | kategorie > podřazená kategorie

Dotaz:

<?php
$db->table('product')
	->order('category:category.name ASC, category.name ASC')
	->fetchAll();
?>

Ale vygeneruje se mi:

SELECT `product`.`id`, `product`.`number`, `product`.`name`, `product`.`price`,
`product`.`category_id`, `category_ref`.`name`, `category`.`name`
FROM `product`
LEFT JOIN `category` ON `product`.`category_id` = `category`.`id`
LEFT JOIN `category` AS `category_ref` ON `category`.`id` = `category_ref`.`parent_id`
ORDER BY `category_ref`.`name` ASC, `category`.`name` ASC;

To je špatně – category_ref.name (hlavní kategorie) mi u každýho řádku vrací NULL. Správnej výsledek dostanu až když druhej join upravim na:

LEFT JOIN `category` AS `category_ref` ON `category_ref`.`id` = `category`.`parent_id`

Já chci ale používat NDBT. Jak to vyřešit?

Editoval David Klouček (18. 6. 2015 20:25)

David Matějka
Moderator | 6445
+
+1
-

zkus

->order('category.name ASC, category.parent.name ASC')
David Klouček
Člen | 57
+
0
-

David Matějka:
Funguje, dík. Jen jsem to přehodil:

->order('category.parent.name ASC, category.name ASC')