我想提交一个表单,每次我想要将新条目添加到数据库中,但不要删除旧表单。
假设我有一个库存实体,其中包含序列号集合。
广告资源表单构建器
$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和一个inventorySerialNumbers
项,因此我将只获得一个存储在数据库中的最新条目。
似乎Symfony忽略了cascade={"persist"}
和'allow_delete' => false
答案 0 :(得分:1)
表单操作将添加或修改实体。在这种情况下,我认为你覆盖了一个实体而不是创建一个实体(选项1)或修改现有实体(选项2)。
创建a simple form,添加Inventory
。用户将填写表单并创建新的Inventory
。提交表单后,您将在数据库中最终得到两条记录。如果你想知道你有多少项,你必须总结这些值。
如果您希望允许用户删除序列号或降低数量,您将需要创建editAction
。不幸的是我在Symfony的网站上找不到一个很好的例子,但这里有两个你应该看的资源: