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

问题描述 投票:0回答:3

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

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表。所以在用户登录后,我想检查哪个用户是哪个组,并获得组权限。我怎样才能做到这一点?请尽量帮助我。

symfony doctrine
3个回答
2
投票

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

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


2
投票

在这一行:

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

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

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

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


1
投票

我解决了这个问题

global $kernel;
$em = $kernel->getContainer()->get('doctrine')->getManager();
$role = $em->getRepository('BackendBundle:user_types')->findOneBy(array(
            'id'    => 10
        ));
© www.soinside.com 2019 - 2024. All rights reserved.