Sql 多对多关系学说
我编辑了更多信息的线程 我有“用户”实体和“Rol”实体,我正在努力收集用户的角色 在我定义的用户实体中:Sql 多对多关系学说,sql,symfony,doctrine,many-to-many,Sql,Symfony,Doctrine,Many To Many,我编辑了更多信息的线程 我有“用户”实体和“Rol”实体,我正在努力收集用户的角色 在我定义的用户实体中: /** * @ManyToMany(targetEntity="AppsManantiales\CommonBundle\Entity\Perfil") * @JoinTable(name="usuarios_perfiles", * joinColumns={@JoinColumn(name="idUsuario", referencedColumnName="idusu
/**
* @ManyToMany(targetEntity="AppsManantiales\CommonBundle\Entity\Perfil")
* @JoinTable(name="usuarios_perfiles",
* joinColumns={@JoinColumn(name="idUsuario", referencedColumnName="idusuario")},
* inverseJoinColumns={@JoinColumn(name="idPerfil", referencedColumnName="idperfil")}
* )
*/
protected $perfiles;
在构造器中:
public function __construct(){
$this->perfiles = new \Doctrine\Common\Collections\ArrayCollection();
$this->contacto = new \Doctrine\Common\Collections\ArrayCollection();
}
在类名称空间放置之前:
use AppsManantiales\CommonBundle\Entity\Perfil;
执行时:
php app/console generate:doctrine:entities CommonBundle
出现一个错误:
[Doctrine\Common\Annotations\AnnotationException]
[Semantical Error] The annotation "@ManyToMany" in property AppsManantiales\CommonBundle\Entity\Usuario::$perfiles was never impo
rted. Did you maybe forget to add a "use" statement for this annotation?
有什么想法吗?第一部分:在这个例子中,你得到了
角色
实体和用户
实体之间的多对多关系。首先,检查生成后的r实体是否正确。在这里你可以找到建立不同不动产的例子:&&(第二个有更多关于条令查询的例子)
问题的第二部分:建立正确的关系后,选择“查询您的用户”
将是smth,如:
$user = $em->createQueryBuilder()
->select('u, r')
->from('YourBundle:User', 'u')
->innerJoin('u.roles', 'r')
->where('u.id IN (:ids)')
->setParameter('ids', $ids)
->getQuery()
->getResult();
正如您所猜测的,您可以在访问者的帮助下获得角色:$user->getRoles()
p、 是的,若所有实体都正确,你们可以手动添加方法
已编辑
哦,对不起,我忘了,你用的是Symfony2
。因此,默认情况下,在您的实体中,您得到这样一行:
use Doctrine\ORM\Mapping as ORM;
正如您所注意到的,您使用的所有注释都带有前缀@ORM\
。示例:
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
因此,只需添加前缀@ORM
,结果如下:
/**
* @ORM\ManyToMany(targetEntity="AppsManantiales\CommonBundle\Entity\Perfil")
* @ORM\JoinTable(name="usuarios_perfiles",
* joinColumns={@ORM\JoinColumn(name="idUsuario", referencedColumnName="idusuario")},
* inverseJoinColumns={@ORM\JoinColumn(name="idPerfil", referencedColumnName="idperfil")}
* )
*/
谢谢你的回复。我改变了线的主体。有一个新问题。你能显示完整的实体代码吗?你是如何使用映射器的?哦,我已经更新了我的答案。所以它是
Symfony2
:)检查是@manytomy还是@ORM\manytomy。错误似乎是条令找不到这个具体的注解。