1

イベントにレース結果を追加するためのフォームを作成しようとしていますが、1 つの選択ボックスのオプションで結合されたテーブルからの情報を表示する方法がわかりません。

これが私のデータベース構造です:

人物表:

id | name
----------
1  | fred
2  | dave
3  | james

参加者テーブル (コードは参加者のレース番号で、シャツにピンで留めるものです):

id | code | person_id | category_id
---------------------------------
1  | 210  | 1         | 1
2  | 211  | 2         | 1
3  | 212  | 3         | 1
4  | 156  | 1         | 2
6  | 157  | 3         | 2

結果表:

id | time | entrant_id
---------------------
1  | 1:20 | 1
2  | 1:35 | 2
3  | 2:02 | 3

結果を Category=1 に追加する場合の望ましい出力:

<select>
    <option>210 - Fred</option>
    <option>211 - Dave</option>
    <option>212 - James</option>
</select>

私が現在 ResultType で取得しているコードは、entrant.code ではなく、(名前ごとに 1 つの余分なクエリを犠牲にして) 良いスタートである person.name だけを取得します。

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('time')
        ->add('entrant', 'entity', array(
            'class'=>'KP\EventsBundle\Entity\Entrant', 
            'property' => 'person.name',
            ));
}

同じオプションのリストで entrant.code と person.name の両方を取得するにはどうすればよいですか?

Symfony を使い始めてまだ数週間なので、どうかお手柔らかにお願いします。

4

1 に答える 1

0

私が思いついた最も簡単な方法は、クラスに__toString()メソッドを実装することです。Entrant

public function __toString()
{
    return sprintf("%d %s", $this->code, $this->person->getName());
}

フォーム タイプのフィールドpropertyからオプションを削除して、メソッドを使用するようにします。entrant

余分なクエリの問題を解決するには、型のオプションでフェッチ結合を実行できます。query_builderentity

于 2013-03-01T21:51:19.577 に答える