[英]Entity deleted when unlinked from relation via Form EntityType Symfony3.4
我在某些實體中將Symfony3.4與softDeletable模塊一起使用。
我有一個ZoneMaterial實體,其中有兩個arrayCollection實體:
/**
* @ORM\ManyToMany(targetEntity="EPC", cascade={"persist"}, orphanRemoval=true)
* @ORM\JoinTable(name="app_zone_material_epc",
* joinColumns={@ORM\JoinColumn(name="zoneMaterial_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="epc_id", referencedColumnName="id")}
* )
*/
private $epcs;
/**
* @ORM\ManyToMany(targetEntity="EPI", cascade={"persist"}, orphanRemoval=true)
* @ORM\JoinTable(name="app_zone_material_epi",
* joinColumns={@ORM\JoinColumn(name="zoneMaterial_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="epi_id", referencedColumnName="id")}
* )
*/
private $epis;
[...]
public function addEpc(EPC $e)
{
$this->epcs[] = $e;
}
public function removeEpc(EPC $e)
{
$this->epcs->removeElement($e);
}
public function getEpcs()
{
return $this->epcs;
}
public function addEpi(EPI $e)
{
$this->epis[] = $e;
}
public function removeEpi(EPI $e)
{
$this->epis->removeElement($e);
}
public function getEpis()
{
return $this->epis;
}
我用如下定義的形式鏈接/取消鏈接它們:
->add('epcs', EntityType::class, array( 'label' =>'MPC',
'class' => 'AppBundle\Entity\EPC',
'query_builder' => function ($repository) use ($options) {
return $repository
->createQueryBuilder('a')
->orderBy('a.name', 'ASC');
},
'multiple' => true,
'expanded' => true))
->add('epis', EntityType::class, array( 'label' =>'EPI',
'class' => 'AppBundle\Entity\EPI',
'query_builder' => function ($repository) use ($options) {
return $repository
->createQueryBuilder('a')
->orderBy('a.name', 'ASC');
},
'multiple' => true,
'expanded' => true))
我的控制器中的updateAction函數如下所示:
public function updtZoneMaterialAction(Request $request, $id){
$doctrine = $this->getDoctrine();
$entityManager = $doctrine->getManager();
$zoneMaterial = $doctrine->getRepository(ZoneMaterial::class)->find($id);
$form = $this->createForm(ZoneMaterialType::class, $zoneMaterial);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
//Persist informations
$entityManager->persist($zoneMaterial);
$entityManager->flush();
//->redirection
}
//Render view
return $this->render('AppBundle:Zone:updt_zone_material.html.twig', array(
'form' => $form->createView(),
'id' => $id
));
}
softDeletable擴展安裝在我的兩個實體EPI和EPC上,但是似乎每次我從ZoneMaterial“取消鏈接” EPI或EPC時,都會刪除相關實體(將DeletedAt設置為new DateTime("NOW")
)) 。
每次我從ZoneMaterial取消EPI或EPC的鏈接時,都會刪除相關實體
這是通過配置orphanRemoval=true
告訴了學說的。
刪除孤兒的設置告訴Doctrine是否應刪除從其聚合根斷開鏈接的實體。
這個概念非常強大,可以實現一種將持久性視為實現細節的編程形式。 可以手動建模其域,而不是手動告知必須刪除實體的ORM,只需從集合中刪除實體就足以自動同步數據庫以反映模型狀態。
如果這不是您想要的,則不orphanRemoval
設置為true。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.