按Doctrine实体中的其他列排序

时间:2014-01-12 14:36:42

标签: symfony doctrine-orm

不确定如何做到这一点:我有一些带有“enum”列的普通Doctrine2实体。每个枚举都有他自己的“等级”(这是他们对我的命令),例如:

  • “white”:0
  • “blue”:1
  • “purple”:2
  • “brown”:3
  • “black”:4

当我表演时只选择此选项,一切正常。但是我需要在这个枚举列上对结果进行排序。所以我尝试添加到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列包含到实体中,只是为了进行排序收集。提前谢谢!

2 个答案:

答案 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];
        }
    }
}

不酷,但也许有人会发现它很有用。为我工作。