Symfony 2.8:CollectionType - 不删除旧条目

时间:2017-11-13 14:53:15

标签: php mysql symfony doctrine-orm

我想提交一个表单,每次我想要将新条目添加到数据库中,但不要删除旧表单。

假设我有一个库存实体,其中包含序列号集合。

广告资源表单构建器

$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

1 个答案:

答案 0 :(得分:1)

表单操作将添加或修改实体。在这种情况下,我认为你覆盖了一个实体而不是创建一个实体(选项1)或修改现有实体(选项2)。

选项1:仅添加新项目

创建a simple form,添加Inventory。用户将填写表单并创建新的Inventory。提交表单后,您将在数据库中最终得到两条记录。如果你想知道你有多少项,你必须总结这些值。

选项2:允许用户修改项目

如果您希望允许用户删除序列号或降低数量,您将需要创建editAction。不幸的是我在Symfony的网站上找不到一个很好的例子,但这里有两个你应该看的资源: