不确定如何做到这一点:我有一些带有“enum”列的普通Doctrine2实体。每个枚举都有他自己的“等级”(这是他们对我的命令),例如:
当我表演时只选择此选项,一切正常。但是我需要在这个枚举列上对结果进行排序。所以我尝试添加到select():
$select = "(case "
. "when m.belt = 'blue' then 1 "
. "when m.belt = 'purple' then 2 "
. "when m.belt = 'brown' then 3 "
. "when m.belt = 'black' then 4 "
. "else 0 end) as beltN";
$query->addSelect($select);
$query->orderBy("beltN","ASC")
但显然它不起作用,因为实体没有“beltN”列,查询返回一个数组而不是对象。如何解决这个问题以获取实体集合?我不需要将beltN列包含到实体中,只是为了进行排序收集。提前谢谢!
答案 0 :(得分:1)
尝试将$select
更改为:
$select = "(case "
. "when m.belt = 'blue' then 1 "
. "when m.belt = 'purple' then 2 "
. "when m.belt = 'brown' then 3 "
. "when m.belt = 'black' then 4 "
. "else 0 end) as HIDDEN beltN";
现在它会回复你一系列的对象。
答案 1 :(得分:0)
作为一种解决方法(在Igor回答我之前)我添加了一个方法来修复结果数组的另一个维度,因为我一直在接收两个数组而不是实体 - 一个用实体,另一个用“beltN”号。它正是这样做的:
public function fixAdditionalColumn(array &$members) {
if (count($members) == 0)
{
return;
}
if ($members[0] instanceof Member)
{
return;
}
foreach ($members as $i => $member) {
if ($member[0] instanceof Member)
{
$members[$i] = $member[0];
}
}
}
不酷,但也许有人会发现它很有用。为我工作。