Symfony 3 - 删除中间表manyToMany上的行

时间:2017-02-17 11:57:50

标签: php symfony doctrine

我的问题:我有一个实体用户和一个实体技能。用户可以拥有多种技能,技能可以拥有多个用户,因此我对此有一个关系ManyToMany。结果是第三个中间表名为" Users_Skills"使用列user_id和skill_id。

我想删除此表上的行,例如id_user = 5的所有行。

我不知道如何做到这一点,因为我没有表Users_Skills的实体,也没有存储库。最好的方法是什么?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

你只需要让你的用户实体获得id为5,清空他的技能列表,然后坚持并冲洗。

示例(在控制器中):

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