在数据库中,我有一个表User(idUser,name ...)和一个表Role(IdRole,description ..) . 在他们两个之间有一个链接表HasRole(idUser,idRole) .
使用Symfony命令行生成实体时,不会生成HasRole实体 . 相反,在用户实体中我在角色属性上有这个:
* @var \Doctrine\Common\Collections\Collection
*
* @ORM\ManyToMany(targetEntity="MyBundle\Entity\Role", inversedBy="utilisateur")
* @ORM\JoinTable(name="hasrole",
* joinColumns={
* @ORM\JoinColumn(name="UTILISATEUR", referencedColumnName="ID")
* },
* inverseJoinColumns={
* @ORM\JoinColumn(name="ROLE", referencedColumnName="ID")
* }
* )
我想在UserRepository中创建一个方法,该方法返回一个id Role的所有用户 .
它应该像这样开始:
$qb = $this->getEntityManager()->createQueryBuilder()
->select('utilisateur')
->from('ACCUEILBundle:User', 'utilisateur');
你可以帮忙吗?
泰
2 回答
如果您使用Doctrine生成ManyToMany连接表,那么实际上您将没有实体 .
如果您将连接表作为实体(例如,因为您在该表中存储了其他数据),那么您应该按以下方式创建关系:
但是在您的情况下,只需获取具有所需ID的角色,然后从中获取用户就足够了:
我给你一个例子,以便你可以将它用于你的案例中 . 我删除了大部分实体属性/注释,以便您轻松获取图片 .
在下面的示例中,存在学生(M)到(N)主题关系 . 要实现M-N,您可以将学生(1)到(N)学生主体(N)到(1)主题,因此关系保存在StudentSubject实体中 .
Student
Subject
StudentSubject
Example Query:
此查询仅选择Student和Subject实体中的给定字段 .