2012-02-03 9 views
2

私は、データベースからロードされたチェックボックス付きフォームを持っています(私はエンティティフィールドタイプを使用します)。チェックボックスは地域と地区です。私は次のデータベーススキーマを持っています:Symfony2カスタムフォーム

+-----------------------------------+ 
| id | parent_id | name    | 
+-----------------------------------+ 
| 1 | NULL  | Region   | 
+-----------------------------------+ 
| 2 | 1   | District   | 
+-----------------------------------+ 
| 3 | 1   | Another district | 
+-----------------------------------+ 
| 4 | NULL  | Another region | 
+-----------------------------------+ 
| 5 | 4   | Next district | 
+-----------------------------------+ 

問題は次の形式が必要です。どうやってするか?オプションで

<b>Region</b><!-- Loaded from database --> 
<!-- Dictricts ordered by name --> 
<input type="checkbox" id="someId" value="3"><label for="someId">Another district</label> 
<input type="checkbox" id="someId" value="2"><label for="someId">District</label> 
<b>Another region</b><!-- Loaded from database --> 
<!-- Dictricts ordered by name --> 
<input type="checkbox" id="someId" value="5"><label for="someId">Next district</label> 

答えて

1

this postのおかげで、これをカスタムレンダリングフォームテンプレートで解決しました。

0

EntityTypeフィールド:

  • query_builder:= 'YourEntity YourBundle'

    • 複数=真
    • 拡大=真
    • プロパティ= 'name' を
    • クラス= 'function(EntityRepository $ er){return $ er-> createQueryBuilder(' r ') - >ここで( 'r.parentIdがNULLでない') - > ORDERBY( 'r.parentId'、 'ASC') - > ORDERBY( 'r.name'、 'ASC');}」
  • +0

    これは役に立ちません。結果は 'name'でソートされますが、** region **と** Dictricts **によってグループ化される結果が、それぞれの領域で' name'によってソートされています。 – kuboslav

    +0

    あなたのエンティティ(parentId上)に反射的な関係を定義していますか?とにかく、EntityTypeフィールドに持って来たネイティブのquery_builderでそれを行うことはできません。反射的なリレーションシップを定義し、INDEX BY DQLクエリでエンティティを適切にソートし、* choices *オプションで結果を送信する必要があります。 – AlterPHP

    +0

    _reflexive relation_を説明できますか? – kuboslav

    関連する問題