2017-11-13 10 views
1

新しいエントリをデータベースに追加したいが、古いエントリを削除しない場合は、フォームを送信したい。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

+0

こんにちは!遅れて申し訳ありませんが、数時間の研究の結果、エントリは削除されずに新しいエントリに置き換えられました。解決策は、私にとっては適切で、フォームを提出するたびにアイテムの完全なコレクションを送信することです。 –

+0

問題を修正したことを知ってうれしいです。だから、ユーザーが新しいアイテムを追加すると、既存のアイテムとマージされますか? –

+0

残念ながら、はい。私は古いアイテムを新しいアイテムで書き直すのを防ぐためにフォームを提出するたびにアイテムを注文する必要があります/ –

答えて

1

を無視しているようです。この場合、新しいもの(オプション1)を作成するか既存のもの(オプション2)を変更するのではなく、エンティティを上書きすると思います。

オプション1:のみ

新しいアイテムを追加Inventoryを追加しますa simple formを作成します。ユーザーがフォームに記入し、新しいInventoryを作成します。フォームを送信すると、データベースに2つのレコードが表示されます。あなたが持っているアイテムの数を知りたければ、それらの値を合計しなければなりません。

オプション2:ユーザーがアイテム

あなたは、ユーザーがシリアル番号を削除したり、量を下げることを可能にしたい場合は

を変更できるようにするには、あなたは editActionを作成するhavoます。残念ながら、私はsymfonyのウェブサイト上で良い例を見つけることができなかったが、ここであなたが見なければならない2 recourcesです:

関連する問題