我的問題:我有一個實體用戶和一個實體技能。一個用戶可以擁有多種技能,而一項技能可以擁有多個用戶,所以我在此有一個關係ManyToMany。結果是第三個名爲「Users_Skills」的中間表,其中列user_id和skill_id。Symfony 3 - 刪除中間表上的行manyToMany
我想在這個表中刪除行,通過實例的所有行id_user = 5
我不知道如何做到這一點,因爲我有表Users_Skills沒有實體,沒有倉庫。什麼是最好的方式來做到這一點?
我的問題:我有一個實體用戶和一個實體技能。一個用戶可以擁有多種技能,而一項技能可以擁有多個用戶,所以我在此有一個關係ManyToMany。結果是第三個名爲「Users_Skills」的中間表,其中列user_id和skill_id。Symfony 3 - 刪除中間表上的行manyToMany
我想在這個表中刪除行,通過實例的所有行id_user = 5
我不知道如何做到這一點,因爲我有表Users_Skills沒有實體,沒有倉庫。什麼是最好的方式來做到這一點?
你只需要讓你的用戶實體的ID爲5,清空他的技能列表,然後堅持和沖洗。
例子(控制器):
$id = 5;
$em = $this->getDoctrine()->getManager();
$repository = $em->getRepository(User::class);
$user = $repository->find($id);
$user->setSkills([]);
$em->flush();
通常使用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();