Symfony表单收集和原则将所有孩子从收集中删除(不需要)

时间:2018-07-17 14:34:55

标签: symfony doctrine-orm orm

我有两个实体orderorderdetail。通过一对多关系进行连接。

Order.php

/**
 * @ORM\OneToMany(targetEntity="App\Entity\OrderDetail", mappedBy="order", fetch="EXTRA_LAZY", orphanRemoval=true, cascade={"persist", "remove"})
 */
private $orderDetails;

OrderDetail.php

/**
 * The order this detail is in.
 *
 * @ORM\ManyToOne(targetEntity="App\Entity\Order", inversedBy="orderDetails")
 */
private $order;

当我编辑订单时,我希望能够删除一个或多个详细信息并保存订单。详细信息不应单独存在。

我到目前为止所做的事情

我添加了orphanRemoval=true以确保细节本身不能存在,并且添加了cascade={"persist", "remove"},以便可以从订单中删除细节。

在我的订单 OrderType.php 的表单中,我添加了带有选项'allow_delete' => true,

的嵌入内容
    ->add('orderDetails', CollectionType::class, array(
    'entry_type' => OrderDetailType::class,
    'entry_options' => array('label' => false),
    'allow_delete' => true,
    'required'     => false,
    'by_reference' => false,
))

我添加了一些jQuery来删除orderDetail,尽管无关紧要,因为没有它,我有同样的问题,这是: 每当我编辑订单并保存时,所有订单详细信息都会从该订单中删除并从数据库中删除。

奇怪的是,如果我在刷新之前将order对象转储到控制器中,则一切看起来应该是应该的。执行$entityManager->flush();时,就会出现问题。

对我的控制器所做的更改没有任何效果。即使我删除了控制器中几乎所有的代码,也删除了jQuery,我编辑了一个订单而没有碰任何东西,然后保存;所有详细信息都将被删除。

您能否说出导致这种现象的原因以及如何改变这种现象?

1 个答案:

答案 0 :(得分:0)

我弄清楚是什么原因引起的。我在order detail中有被禁用的表单字段。这些禁用的字段未由我的浏览器发送到服务器。这导致学说将那些孩子带走。对此问题here进行了一些讨论。

为了仍然具有无法更改但仍然可见的字段,我删除了disabled属性,并将属性readonly => true添加到了这些表单字段中,并且解决了我的问题。