订购许多专栏

时间:2016-06-09 16:30:51

标签: symfony

抱歉,我的英语,我是法国人,

在我的项目中,我有实体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"

您是否有"以及#34;我的价格结果?

对于"我有同样的问题。广告由" registration_date"车辆

2 个答案:

答案 0 :(得分:0)

我认为你需要的是“联盟”而不是“康卡特”。 “Concat”基本上合并了一行中不同列的值,这对你的情况没有多大帮助,但是Union将不同查询的结果合并在一起,你可以将它们一起排序,但是使用带有doctrine的联合可能有点棘手,你需要它使用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(可能单个表类表但不是< strong>映射超类)。例如,将Vehicle实体作为Boat,Bike,Car的父类,并将所有常见属性(例如price)放入其中并直接查询Vehicle并将所有结果一起获取(使用sort和所有内容)。

其他替代解决方案(不推荐)是在PHP代码中合并和排序来自不同实体(Car,Boat,Bike)的不同查询的结果。

答案 1 :(得分:0)

我不知道如何使用CONCAT并仅检索广告实体。 你不能用教条做一个子查询。

但我建议直接在每个字段上订购:

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

结果应该是一样的。