如何使用doctrine查询symfony2中实体类中的另一个实体

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用doctrine查询symfony2中实体类中的另一个实体相关的知识,希望对你有一定的参考价值。

我正在尝试使用实体类文件中的实体管理器进行查询但是我收到此错误:

FatalErrorException: Error: Call to undefined method Acme\MasoudBundle\Entity\User::getDoctrine() in /var/www/test/src/Acme/MasoudBundle/Entity/User.php line 192

我的实体类是:

namespace Acme\MasoudBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\AdvancedUserInterface;

/**
 * User
 *
 * @ORM\Table(name="user")
 * @ORM\Entity
 */
class User implements AdvancedUserInterface, \Serializable
{
     /**
     * Set email
     *
     * @param string $email
     * @return User
     */
     public function setEmail($email)
     {
         $this->email = $email;

         return $this;
     }

    /**
     * Get email
     *
     * @return string 
     */
    public function getEmail()
    {
        return $this->email;
    }

    /**
     * Set isActive
     *
     * @param boolean $isActive
     * @return User
     */
    public function setIsActive($isActive)
    {
        $this->isActive = $isActive;

        return $this;
    }

    /**
     * Get isActive
     *
     * @return boolean 
     */
    public function getIsActive()
    {
        return $this->isActive;
    }
    /**
     * @inheritDoc
     */
    public function getRoles()
    {
        $em = $this->getDoctrine()->getManager();
        $Permission= $em->getRepository('MasoudBundle:Permission')->find(1);
        $this->permissions[]=$Permission->permission;
        return $this->permissions;
    }
}

我想拥有这样的权限和身份验证系统,你能帮我吗?有5个表,一个用户表,一个组表,一个权限表,一个group_permission和一个user_group表。所以在用户登录后,我想检查哪个用户是哪个组,并获得组权限。我怎样才能做到这一点?请尽量帮助我。

答案

由于Entity Manager,您的实体不应该知道其他实体和separation of concerns

为什么不使用UserPermission映射到相应的角色(在您的情况下为Doctrine Entity Relationships/Associations实体的实例)。它允许您从User实例本身访问给定用户的相应权限。

另一答案

在这一行:

$em = $this->getDoctrine()->getManager();

$this指的是当前的类,User Entity没有一种叫做getDoctrine()的方法。 $this->getDoctrine()在控制器中工作,你将Controller类扩展为包含ContainerAware方法的getDoctrine()的子类。

换句话说,此方法仅适用于类容器或其子类的对象,如下所示:$controller->getDoctrine()->getManager()

此外,您不希望在实体类中包含EntityManager,这不是一种好的处理方式。你最好使用列表来做这些事情

另一答案

我解决了这个问题

global $kernel;
$em = $kernel->getContainer()->get('doctrine')->getManager();
$role = $em->getRepository('BackendBundle:user_types')->findOneBy(array(
            'id'    => 10
        ));

以上是关于如何使用doctrine查询symfony2中实体类中的另一个实体的主要内容,如果未能解决你的问题,请参考以下文章

使用 Doctrine 和 Symfony2 查询多对多关系

Symfony2/Doctrine:如何从实体类中持久化一个实体?

Symfony2/Doctrine:如何使用 OneToMany 将实体重新保存为级联新行

Symfony2 Doctrine 错误:无法计算使用 HAVING 子句的查询。使用输出步行器进行分页

如何使用 Doctrine 在 Symfony2 中实现子查询?

Symfony2 - Doctrine - 在实体管理器刷新调用中捕获错误