Doctrine2多次加入

时间:2014-05-02 16:16:22

标签: mysql sql symfony join doctrine-orm

我的用户实体有问题。我有Doctrine生成的代码,如下所示:

    /**
     * @var \Doctrine\Common\Collections\Collection
     *
     * @ORM\ManyToMany(targetEntity="Frontend\UserBundle\Entity\SfGuardPermission", inversedBy="user")
     * @ORM\JoinTable(name="sf_guard_user_permission",
     *   joinColumns={
     *     @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     *   },
     *   inverseJoinColumns={
     *     @ORM\JoinColumn(name="permission_id", referencedColumnName="id")
     *   }
     * )
     */
    protected $permission;

问题在于加入,因为我无法加入用户和权限。我该怎么办?我必须将带有sf_guard_grop的sf_guard_user与带有sf_guard_permission的sf_guard_group_permission一起加入sf_guard_user。因为我需要获得用户许可。我不是没有如何在上面的代码中写这样的连接。有可能吗?

2 个答案:

答案 0 :(得分:1)

您无法在一个注释中编写此连接。实际上,您已经有三个实体表sf_guard_usersf_guard_groupsf_guard_permission以及两个可以在您已经开始时编写的交叉表sf_guard_user_groupsf_guard_group_permission

但是因为看起来你试图将一些symfony 1.x的东西迁移到symfony 2.x: symfony 1.x中的sf_guard_user_permisson表是用户和权限之间的交叉表,包含未通过用户所在组授予的用户的非凡权限,因此您已完成。

答案 1 :(得分:1)

SBH thx for replay,当然你对所写的一切都是正确的。但是我的sf_guard_user_permisson是空的,所以我无法使用它。我可以生成这个表,这没问题,但是我必须保持它。这是我的下一步工作,所以我写下面的代码:

 namespace Frontend\UserBundle\Entity;

 // ...

    /**
     * @var \Doctrine\Common\Collections\Collection
     *
     */
    protected $permissions;

    /**
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getPermissions()
    {
        $groups = $this->getSfGuardGroups();

        foreach ($groups as $group)
        {
            $groupPermisions = $group->getPermission();
            foreach ($groupPermisions as $groupPermision)
            {
                if (!in_array($groupPermision, $this->permissions)) {
                    $this->permissions[] = $groupPermision;
                }
            }
        }

        return $this->permissions;
    }

    /**
     * @param string $permissionName
     * @return boolean
     */
    public function hasPermission($permissionName)
    {
        $this->getPermissions();
        foreach ($this->permissions as $permission)
        {
            if($permission->getName() === $permissionName) {
                return true;
            }
        }
        return false;
    }

// ..

你怎么看?你的意见对我来说非常重要。

编辑: 对于SBH的帮助,我得到了我的问题的答案。我希望它会帮助其他人。如果您不明白,请查看SBH答案。