Viac násobný self-join Nette\Database\Table\Selection
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- tino415
- Člen | 46
Potrebujem spraviť viac násobný self-join, intuitívne ma napadlo napísať toto:
<?php
$query = $this->getTable()
->select(implode(', ', [
'parent.original_id AS city_id',
'parent.parent.original_id AS destination_id',
'parent.parent.parent.original_id AS region_id'
]))
->where('category.name', 'hotel')
->where('(suggester_item.original_id = 0 AND suggester_item.original_name = ?) OR suggester_item.original_id = ?',
$hotel_original_name,
$hotel_original_id
);
?>
ale vracia mi to:
SELECT
`parent`.`original_id` AS `city_id`,
`parent`.`original_id` AS `destination_id`,
`parent`.`original_id` AS `region_id`
FROM `suggester_item`
LEFT JOIN `suggester_category` AS `category`
ON `suggester_item`.`category_id` = `category`.`id`
LEFT JOIN `suggester_item` AS `parent`
ON `parent`.`parent_id` = `parent`.`id`
WHERE (`category`.`name` = ?)
AND ((`suggester_item`.`original_id` = 0 AND `suggester_item`.`original_name` = ?)
OR `suggester_item`.`original_id` = ?)
nič iné ma nenapadlo, možno ešte si vrátiť prvý a použiť related,
ale rád by som to mal v jednom
query…