新しいエントリをデータベースに追加したいが、古いエントリを削除しない場合は、フォームを送信したい。Symfony 2.8:CollectionType - 古いエントリを削除しない
たとえば、シリアル番号コレクションを含む在庫エンティティがあります。
インベントリフォームビルダ
$builder
->add('quantity', IntegerType::class)
->add('inventorySerialNumbers', CollectionType::class, array(
'entry_type' => InventorySerialNumberType::class,
'allow_add' => true,
'allow_delete' => false,
'by_reference' => false,
))
;
インベントリのシリアル番号のプロパティ:
/**
* @var ArrayCollection
*
* @ORM\OneToMany(targetEntity="InventorySerialNumber", mappedBy="inventory", cascade={"persist"})
*/
protected $inventorySerialNumbers;
だから、私は新しいインベントリを作成したい - 私はquantity
と2 inventorySerialNumbers
と、すべてのデータが正しく追加されている送信。しかし、もう1つのエントリを追加する場合は、数量1と1つのinventorySerialNumbers
アイテムを送信します。その結果、データベースに格納されている最新のエントリが1つだけ取得されます。
は、symfonyはフォームアクションがエンティティを追加または変更しますcascade={"persist"}
と'allow_delete' => false
こんにちは!遅れて申し訳ありませんが、数時間の研究の結果、エントリは削除されずに新しいエントリに置き換えられました。解決策は、私にとっては適切で、フォームを提出するたびにアイテムの完全なコレクションを送信することです。 –
問題を修正したことを知ってうれしいです。だから、ユーザーが新しいアイテムを追加すると、既存のアイテムとマージされますか? –
残念ながら、はい。私は古いアイテムを新しいアイテムで書き直すのを防ぐためにフォームを提出するたびにアイテムを注文する必要があります/ –