0

我编辑线程以获取更多信息。

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

在我定义的用户实体中:

/**
 * @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? 

有任何想法吗 ?。

4

1 回答 1

0

Role第一部分:所以在这种情况下,你得到了实体和实体之间的多对多关系User。首先,检查,生成后r个实体是否正确。在这里你可以找到建立不同领域的例子:http: //docs.doctrine-project.org/en/latest/reference/association-mapping.html && http://docs.doctrine-project.org/en/2.0。 x/reference/association-mapping.html(第二个有更多信息,包括 Doctrine 查询示例)

您问题的第二部分:建立正确的关系后,选择您的查询,User例如:

$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()

ps 是的,如果所有实体都正确,您可以手动添加方法。

已编辑

哦,对不起,我忘了,你用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")}
 * )
 */
于 2013-10-26T08:38:45.383 回答