2016-05-30 3 views
1

私は、共通のプロパティを使用する多くのエンティティを持つサイトで作業しています。symfony3とDoctrineのManyToOne OrderBy:厳格なコントローラでEntityTypeフォーム要素を注文する方法

このエンティティのいずれかを作成または更新するたびに、このプロパティを特定のOrder(アルファベット順)でフォーム(HTML Select TAG)に表示する必要があります。

シンフォニー2では、findBy()クラスのリポジトリメソッドをオーバーライドしてorderBy節を追加するだけで十分だと思いますが、symfony3のようには動作しません。

symfony3でこのORDERBYをacomplishする唯一の方法はbuildForm方法を変更し、query_builderオプションを追加している

...このような何か:

/** 
* @param FormBuilderInterface $builder 
* @param array $options 
*/ 
public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('myProperty', EntityType::class, array(
      'class' => 'MyBundle:MyPropertyClass', 
      'required' => false, 
      'query_builder' => function ($er) { 
       return $er->createQueryBuilder('p')->orderBy('p.order', 'ASC'); 
     })) 

しかし、私はCOPY & PASTEこの考えを好きではありませんinput要素(EntityType)を注文するだけの、すべてのentityFormTypeのコード。

EntityTypeフィールドを使用してエンティティを編集するときに、要素を並べ替えるためのより良い/適切な方法が必要であることは確かです(アルファベット順)。 symfony2で提供されるソリューションはここでは機能しません。

誰でも同じ問題がありますか?

ちょうど私たちが

を必要に応じて、すべての選択入力が表示されたクラスのリポジトリでいくつかのメソッドをオーバーライドすることによって、方法 Symfony2ので

1.- ClassRepositoryのfindAll()またはfindBy()何をして働いていません

ティ@OrderBy

class MyClassRepository extends EntityRepository{ 

    public function findAll(){ 
    return $this->findBy(array(),array('myProperty' => 'ASC')); 
    } 

    /** 
    * @inheritdoc 
    */ 
    public function findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) 
    { 
    $orderBy = $orderBy === null ? array('myProperty' => 'ASC') : $orderBy; 
    return parent::findBy($criteria, $orderBy, $limit, $offset); 
    } 

} 

2.-オブジェクトのプロパティの配列を並べ替えることですが、私は現在これを使用していますが、関係の反対側で、私が見つけようとしているのは、編集アクション/コントローラこのプロパティを使用するすべてのformTypeクラスのコードを変更する必要はありません:: Class(少し明確にするため、私のモデルのいたるところにあるenumのようなものです)

+0

私はそれが既にこれを試して – Jonos

答えて

0

あなたのエンティティにOrderByアノテーションを追加できますクラス:

/** @Entity **/ 
class MyEntity 
{ 
    // ... 

    /** 
    * @ManyToMany(targetEntity="Property") 
    * @OrderBy({"order" = "ASC"}) 
    **/ 
    private $properties; 
} 
+1

クエリを作成するためのクラスのリポジトリを使用していない理由の質問があると思います...が、その関係の間違った側では、 '@でのみ有効です... toMany'と私は '@ ... toOne'側で必要としましたが、それは完全に無視されています – Jonos

+0

あなたの関係は正しいですか?あなたのエンティティとそのプロパティの間にOneToManyを持たせることは論理的ではありませんか? – Veve

+1

実際には、私がしようとしているのは、選択入力[エンティティタイプ](http://symfony.com/doc/current/reference/forms/types/entity.html)の要素をソートすることです編集アクションで1つのオブジェクトを選択します。 symfony2では、この種のクエリはすべてクラスリポジトリによって実行されていました。明らかにもうこれ以上ではありません。あるいは、正しいメソッドをオーバーライドしていないかもしれません... – Jonos

関連する問題