我有两个实体order
和orderdetail
。通过一对多关系进行连接。
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,我编辑了一个订单而没有碰任何东西,然后保存;所有详细信息都将被删除。
您能否说出导致这种现象的原因以及如何改变这种现象?
答案 0 :(得分:0)
我弄清楚是什么原因引起的。我在order detail
中有被禁用的表单字段。这些禁用的字段未由我的浏览器发送到服务器。这导致学说将那些孩子带走。对此问题here进行了一些讨论。
为了仍然具有无法更改但仍然可见的字段,我删除了disabled
属性,并将属性readonly => true
添加到了这些表单字段中,并且解决了我的问题。