2017-01-22 2 views
0

エンティティ "Menus"があります。これには複数のエンティティ "Dishes"(ManyToMany)が含まれています。Doctrine 2:order XToMany特定のアトリビュートの別のエンティティによって順序付けられたリレーション。

エンティティ "Dish"にはエンティティ "DishType"(ManyToOne)があります。

エンティティ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"}) 

のようなものを持っているとwoudはそれを行うのですか方法はありますか?

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

のように全体の実体「DishType」にデフォルトの順序を追加する方法はありませんか?

ご協力いただきありがとうございます。

答えて

0

これは理想的なものではありませんが、私は小枝の拡張でこれを行います。私は本質的に小枝でフィルタを呼び出してエンティティの子をソートします。小枝で

{%for single in orderPosition($entity->otherEntity) %} 
{{single}} 
{%endfor%} 
それを呼び出すその後

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; 
    } 

here小枝の拡張を参照してください)この機能を備えた小枝の拡張を作成します。

関連する問題