2017-02-17 41 views
0

我的問題:我有一個實體用戶和一個實體技能。一個用戶可以擁有多種技能,而一項技能可以擁有多個用戶,所以我在此有一個關係ManyToMany。結果是第三個名爲「Users_Skills」的中間表,其中列user_id和skill_id。Symfony 3 - 刪除中間表上的行manyToMany

我想在這個表中刪除行,通過實例的所有行id_user = 5

我不知道如何做到這一點,因爲我有表Users_Skills沒有實體,沒有倉庫。什麼是最好的方式來做到這一點?

回答

0

你只需要讓你的用戶實體的ID爲5,清空他的技能列表,然後堅持和沖洗。

例子(控制器):

$id = 5; 
$em = $this->getDoctrine()->getManager(); 
$repository = $em->getRepository(User::class); 
$user = $repository->find($id); 
$user->setSkills([]); 
$em->flush(); 
1

通常使用Doctrine ORM工作時,你應該考慮在對象的條件,而不是在表和行方面。

$user = $em->getRepository('AppBundle:User')->find(5); 
$skills = $user->getSkills(); 

foreach ($skills as $skill) 
{ 
    $user->removeSkill($skill); 
} 

$em->flush(); 

另一種選擇

$user = $em->getRepository('AppBundle:User')->find(5); 
$skills = $user->getSkills(); 
$skills->clear(); 
$em->flush(); 

也不要了解Owning Side and Inverse Side