Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 多对多关系学说_Sql_Symfony_Doctrine_Many To Many - Fatal编程技术网

Sql 多对多关系学说

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

我编辑了更多信息的线程

我有“用户”实体和“Rol”实体,我正在努力收集用户的角色

在我定义的用户实体中:

/**
 * @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。错误似乎是条令找不到这个具体的注解。