我有用户实体:
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。 请帮我构建这个查询。谢谢!
答案 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)
现在它按预期工作了。