0

私の Symfony アプリのエンティティには、ID ではなくシリアル番号に基づく関連付けがあります。関連付けは次のようになります。

/**
 * @var Department
 *
 * @ORM\ManyToOne(targetEntity="Department")
 * @ORM\JoinColumn(name="department_serial", referencedColumnName="serial")
 */
protected $department;

このエンティティのフォームを作成するとき、次のように部門フィールドを追加します。

->add('department', null, array
(
  'label' => 'Choose department',
  'required' => true,
  //some more...
))

問題は、フォームがレンダリングされると、間違った html リスト項目の値になってしまうことです。値は実際の部門 ID ではないため、項目は自動採番されているようです。また、私の目標であるシリアル番号にも対応していません。これは私が得るものの例です:

<select id="someId" name="form[someName]">
  <option value="0">Department A</option>
  <option value="1">Department B</option>
  <option value="2">Department C</option>
  <option value="3">Department D</option>
  <option value="4">Department E</option>
  <option value="5">Department F</option>
</select>

上記のリスト項目の値は、各部門のシリアル番号である必要があります。そうでないため、エンティティとその部門の間のリンクが失われているようで、フォームを保存できません。(部署の選択が必要で、通し番号が[0、1、2、3、4、5]の部署は存在しません。)

したがって、私の質問は次のとおりです。関連付けられたエンティティのどのプロパティをhtmlリストの値として使用する必要があるかをフォームタイプでどのように示すことができますか? 各リスト項目のラベルを変更する「プロパティ」というオプションがあることは知っていますが、その値を変更する方法はありますか?

4

1 に答える 1

0

それを私が直した; これを行う唯一の方法は、 @ORM\Id を定義に追加して、エンティティ Department のシリアル プロパティを ID にすることでした。

実際の ID は、他の 2 つのプロパティで作成された結合キーであり、どこにも使用されていませんが、従来の目的で使用されていました。@uniqueConstraint を使用してこれらのフィールドを定義しました。

この場合、これは可能でしたが、id が他の場所にもリンクされている場合、明らかにこのソリューションは使用できません。

どういうわけか、Symfony2 は、フォームが構築されているエンティティに関連するエンティティのリスト値として使用する非 id プロパティに到達できません。私にはバグのように思えます...?

于 2013-08-01T09:59:56.633 に答える