9

Symfony2 では、 Doctrine で多対 1 の関係を指すフォームのコレクションを埋め込み、追加と削除を許可する場合、レコードを最初から削除し、最後に追加し、途中でいくつか編集すると、システムはどのようになりますか?どのレコードをどのデータで更新するか知っていますか?

チュートリアルには、埋め込まれたデータの主キーを渡すものは何もありません。特定の状況下で、レコードがその場で編集されるのではなく、不必要に削除され、再度追加されます (特定のレコードに変更がない場合でも)。これにより、フォームに含まれていないレコードのフィールドが壊れ、DB モデルのデフォルト値に設定されます。

フォームで主キーを渡し、データが戻ってきたときに更新を実行するために使用する方法はありますか?

4

3 に答える 3

4

すべてのクエリに対して (エンティティ ID によって) コレクションにインデックスを付けたい場合はindexBy、エンティティ クラスでアノテーションを使用するだけです。

/**
 * @ORM\OneToMany(targetEntity="EntityClass", mappedBy="EntityVariable", indexBy="id")
 */
private $collection;
于 2013-06-23T20:35:07.857 に答える
0

プライマリ ID を渡す 1 つの方法は、INDEX BYを使用することです。

たとえば、Customer というエンティティがあり、Customer に複数の電子メールがあるとします。私の Customer リポジトリ クラスでは、コレクションが Email のプライマリ ID によってインデックス付けされるように指定できます。

$qb->select('c, e')
    ->leftJoin('c.emails', 'e', null, null, 'e.id')
    ->where('c.id = :id');

そうすることで、入力タグの生成された名前は

customer[emails][e.id][fieldName]

フォームを送信すると、Symfony は入力名に従ってリクエスト値をバインドします。

于 2013-03-14T07:36:16.293 に答える