2016-06-09 6 views
0

простите за мой английский, я французским,Сортировки со многими колонками

В моем проекте, у меня есть объекты автомобили, лодки, велосипеды и эти сущности вызов в объекте Сейчас. Цена находится в объектах Car, Boat и Bike, поэтому для заказа по цене мне нужно объединить Car.price, boat.price и bike.price в одной колонке в моем запросе. У меня есть тест:

$query->addSelect('CONCAT(c.priceTtc, b.priceTtc, bo.priceTtc, t.priceTtc, p.priceTtc) AS all_price'); 
$query->orderBy('all_price', $order); 

но мой результат не вернуть мою сущность объявления, но оно возвращает массив с объявлениями в ключевых 0 и NULL в ключевом «all_price»

У вас есть решение для «порядка по «моему результату по цене?

У меня такая же проблема для «порядка» реклама на «REGISTRATION_DATE» автомобиль

+0

merge not merde :). – Alsatian

+0

Это совершенно нормально, так как Doctrine не может установить «price_all» в вашей структуре объявления, она добавляет ее в массив. Что ты хочешь ? Вы не сказали этого в своем вопросе. Объясните нам, как вы хотите, чтобы он вернулся. Где должен идти результат all_price, если вы станете только объектом объявления, как ожидалось? – Alsatian

+0

Спасибо за ваше возвращение, я изменил свой пост. – Darki666

ответ

0

Я думаю, что вам нужно, это «Союз» вместо «Concat». «Конкат» в основном объединяет значения разных столбцов в одной строке, что мало помогает в вашем случае, но Союз объединяет результаты разных запросов вместе, и вы можете сортировать их вместе, однако использование союза с доктриной может быть немного сложным, и вам нужно использовать Native SQL.

Возможно, самым простым решением является использование подзапроса для запроса запроса по другим запросам. Вот некоторые примеры:

Doctrine 2: how do you use a subquery column (in the SELECT clause) http://melikedev.com/2013/06/07/php-doctrine-dql-select-subquery/

Другой вариант (лучшие практики на мой взгляд), чтобы изменить структуру лица и использовать doctrine inheritance (вероятно одного таблицы или класса Таблица, но не Mapped Суперклассы). Например, создайте объект Vehicle в качестве родительского класса Boat, Bike, Car и поместите в него все общие свойства (например, цену) и запросите автомобиль непосредственно и получите все результаты вместе (со всеми и все).

Другое альтернативное решение (не рекомендуется) заключается в объединении и сортировке результатов различных запросов от разных объектов (Car, Boat, Bike) в вашем PHP-коде.

0

Я не знаю, как использовать CONCAT и получить только объект объявления. Вы не можете сделать подзапрос с учением.

Но я предлагаю сделать заказ прямо на каждом поле:

->orderBy('c.priceTtc',$order) 
->addOrderBy('b.priceTtc',$order) 
->addOrderBy('bo.priceTtc',$order) 
->addOrderBy('t.priceTtc',$order) 
->addOrderBy('p.priceTtc',$order) 

Результат должен быть таким же.

Смежные вопросы