2
3个表之间一对多的关系选择字段我有用户实体:许多在教义和ZF2与查询生成器
class User{
...
/**
* @var Module $modules
* @ORM\ManyToMany(targetEntity="Adm\Entity\Module", inversedBy="users", cascade={"persist"})
* @ORM\JoinTable(
* name="user_module",
* joinColumns={@ORM\JoinColumn(name="module_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}
*)
*/
protected $modules;
public function __construct() {
$this->modules = new \Doctrine\Common\Collections\ArrayCollection();
}
...
}
和模块实体:
class Module{
...
/**
* @ORM\ManyToMany(targetEntity="Adm\Entity\User", mappedBy="modules")
*/
protected $users;
...
}
我有三个表:用户,模块和user_module(用户和模块之间的关系,没有额外的字段)。 我试图建立一个查询来获取用户(用于$ id)和模块相关的他,这些关系是在user_module表中。这是我做过什么:
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;
}
但不与用户,它只是把从模块表,它具有相同的ID用户1倍的结果使相关模块。 请帮我建立这个查询。谢谢!
尝试取出 - > setMaxResults(1) – Garry
由于@Garry,去除该线和也我被反转连接列注释: '* joinColumns = {@ ORM \ JoinColumn(名称= “模块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”)} –