【发布时间】:2017-09-10 18:31:42
【问题描述】:
我在两个实体(ClientProject 和 Tour)之间存在多对多关系,除了一种情况外,它实际上是有效的。当我想清除这些实体之间的所有关系时,它不起作用并且数据库没有相应地更新。
ClientProject.php
/**
* @ORM\ManyToMany(targetEntity="Tour", inversedBy="clientProjects")
* @ORM\JoinTable(
* name="client_projects_tour_items",
* joinColumns={
* @ORM\JoinColumn(name="client_project_id", referencedColumnName="id")
* },
* inverseJoinColumns={
* @ORM\JoinColumn(name="tour_id", referencedColumnName="id")
* }
* )
*/
protected $tourItems;
public function removeTourItem(\SharedBundle\Entity\Tour $tourItem)
{
$this->tourItems->removeElement($tourItem);
}
Tour.php
public function removeClientProject(\SharedBundle\Entity\ClientProject $clientProject)
{
$this->clientProjects->removeElement($clientProject);
}
工作示例:
- 更新前:
- Tour 1 / ClientProject 3
- Tour 1 / ClientProject 4
- 操作:删除 Tour 1 和 ClientProject 4 之间的关系
- 更新后:
- Tour 1 / ClientProject 3
失败的例子:
- 更新前:
- Tour 1 / ClientProject 3
- 操作:删除 Tour 1 和 ClientProject 3 之间的关系
- 更新后:
- Tour 1 / ClientProject 3
控制器动作
public function editClientProjectAction($id, Request $request)
{
if (!$request->isXmlHttpRequest()) {
return $this->redirectToRoute('contact');
}
$clientProject = $this->getDoctrine()->getRepository(ClientProject::class)->find($id);
if(!$clientProject) {
return new JsonResponse(array('redirect' => $this->generateUrl('contacts')));
}
$form = $this->createForm(ClientProjectFormType::class, $clientProject, array(
'action' => $this->generateUrl('edit-client-project', array('id' => $id))
));
$form->setData($clientProject);
if ($request->isMethod('POST')) {
$form->submit($request->request->get($form->getName()), false);
if($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($clientProject);
$em->flush();
return new JsonResponse(array('reloadDatatable' => 'client_project_datatable'));
} else {
return new JsonResponse(array('reload' => true));
}
}
return $this->render('@AppBundle/client-projects/edit-client-project.html.twig', [
'form' => $form->createView(),
]);
}
【问题讨论】:
-
可能会分享更多关于失败示例的代码可能有助于解决您的问题。
-
@PeterTanath 请查看更新后的问题