从Doctrine和ZF2中的3个表与查询构建器之间的多对多关系中选择字段

时间:2016-02-27 21:19:31

标签: php doctrine-orm zend-framework2 doctrine-query

我有用户实体:

class Module{
...
/**
* @ORM\ManyToMany(targetEntity="Adm\Entity\User", mappedBy="modules")
*/
protected $users;
...
}

和模块实体:

    public function getUser($id){
        $qb = $this->getEm()->createQueryBuilder()
        ->select('u', 'm')
        ->from('Adm\Entity\User', 'u')
        ->join('u.modules', 'm')
        ->where('u.id = ?1')
        ->setParameter(1, $id)
        ->setMaxResults(1);
        $result = $qb->getQuery()->getResult(\Doctrine\ORM\AbstractQuery::HYDRATE_ARRAY);
        return $result;
    }

我有三个表:user,module和user_module(用户和模块之间的关系,没有额外的字段)。 我正在尝试构建一个查询来获取用户($ id)和与他相关的模块,哪些关系在user_module表中。这就是我所做的:

:.*?(-|$)

但是没有将相关模块带给用户,它只带来来自模块表的1个结果,它与用户具有相同的id。 请帮我构建这个查询。谢谢!

1 个答案:

答案 0 :(得分:1)

我意识到我正在反转连接列语句:

*  joinColumns={@ORM\JoinColumn(name="module_id", referencedColumnName="id")},
*  inverseJoinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}

必须是:

*  joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
*  inverseJoinColumns={@ORM\JoinColumn(name="module_id", referencedColumnName="id")}

而且,我必须在我的函数中删除此声明,感谢@Garry指出:

->setMaxResults(1)

现在它按预期工作了。