2015-08-21 2 views
0

У меня есть два объекта: события и карточки, у которых у них есть поле 'position', и я хочу получить их все и отсортировать по положению в массиве.Запрос двух разных объектов с общим параметром для их сортировки

Так что я хотел бы получить что-то вроде:

array('Card_1 (position 1)', 'Event_3 (position 2)', 'Event 2 (position 3)', 'Card 2 (position 4)') и так далее.

Обычно я использовал бы что-то вроде UNION в Native SQL, есть ли более простой способ сделать это с помощью Doctrine?

+0

hmn doctrine не имеет поддержки профсоюза, но вы можете выполнить необработанный запрос –

+0

другим решением может быть, чтобы сохранить перенаправленный суперкласс, у которого есть поле, которое расширяют ваши обе сущности. –

+0

Я думал об использовании сопоставленного суперкласса, но согласно Доктрине doc: «Отображаемый суперкласс не может быть сущностью, он не зависит от запросов, а постоянные отношения, определяемые отображаемым суперклассом, должны быть однонаправленными (только с собственной стороной)». – mb3rnard

ответ

0

Я не мог использовать собственный запрос, поскольку он вызывал у меня проблемы с мощностью и использование сопоставленного суперкласса не было вариантом, так как этот тип класса не может быть запрошен.

Я извлекаться как набор объектов отдельно, объединены в массив и использовать usort, чтобы сделать работу:

$result = array_merge($events, $cards); 
usort($result, function($a, $b) { return strcmp($a->getPosition(), $b->getPosition()); }); 

Если кто-то придумал лучшее решение, используя Учение мне любопытно увидеть его.