Doctrine 2:命令XToMany Relation,它本身由另一个Entity在特定属性上排序

时间:2017-01-22 13:14:58

标签: doctrine-orm twig symfony

我有一个实体"菜单",其中包含多个实体"菜肴" (多对多)。

实体" Dish"有一个实体" DishType" (多对一)。

实体DishType包含一个属性" displayOrder" (我要在其上设置顺序)。

在Twig中,我想制作一个循环: foreach菜单,显示每个菜肴按" DishType"和它本身,由属性" displayOrder" DishType。

在我的实体"菜单"中,我有:

/**
 * @ORM\ManyToMany(targetEntity="Dish", inversedBy="menus", cascade={"persist"})
 * @ORM\JoinTable(name="dish_menus")
 * @ORM\OrderBy({"dishType" = "ASC"})
 */
protected $dishes;

但是我想要像

这样的东西
@ORM\OrderBy({"dishType.displayOrder" = "ASC"})

有没有办法呢?

是否有办法向整个实体添加默认订单" DishType"像

 * @ORM\OrderBy({"displayOrder" = "ASC"})

提前感谢您的建议。

1 个答案:

答案 0 :(得分:0)

远非理想,但我用枝条扩展做这件事,我基本上在树枝上调用过滤器来为我排序实体的孩子。使用此功能创建树枝扩展(请参阅twig extensions here

 public function orderPosition($arr) {
        $size = count($arr);
        for ($i = 0; $i < $size; $i++) {
            for ($j = 0; $j < $size - 1 - $i; $j++) {
                if ($arr[$j + 1]->getPosition() < $arr[$j]->getPosition()) {
                    $this->swap($arr, $j, $j + 1);
                }
            }
        }
        return $arr;
    }

然后用树枝打电话

{%for single in orderPosition($entity->otherEntity) %}
{{single}}
{%endfor%}