2017-07-04 28 views
1

我有这个查询创建与学说querybuilder,我得到的返回是一个数组的数组。 我想获得一个返回是一个对象数组,这可能吗?学说queryBuilder:返回对象不是数组

我知道通常Doctrine返回一个实体的对象,因为我有一个内部连接从另一个表中获取名称返回数组。

在此先感谢。

$qb->select('u', 'h.name') 
     ->from('AppBundle:UserHose', 'u') 
     ->innerJoin('AppBundle:Hose', 'h', 'WITH', 'u.hoseId = h.id') 
     ->where('u.userId = :userId') 
     ->orderBy('u.id', 'DESC') 
      ->setParameter('userId', $userId); 


    return $qb->getQuery()->getResult(); 

回答

1

这是不可能这样。换句话说,你做错了。

您正在告诉Doctrine返回包含实体和字符串的集合的集合,所以这就是您得到的。学说不会因此而制造出一个对象,因为它不知道如何保存这样的结果。

​​

如果你希望只接收对象的集合,你需要创建具有两个字段(相关实体和字符串属性)一个新的实体,然后用ResultSet mapping水合说。

3

您可以使用此:

return $qb->getQuery()->getResult(Query::HYDRATE_ARRAY); 

或者这样:

return $qb->getQuery()->getArrayResult(); 
0

getResult()只需添加\Doctrine\ORM\Query::HYDRATE_ARRAY这样

$qb->select('u', 'h.name') 
    ->from('AppBundle:UserHose', 'u') 
    ->innerJoin('AppBundle:Hose', 'h', 'WITH', 'u.hoseId = h.id') 
    ->where('u.userId = :userId') 
    ->orderBy('u.id', 'DESC') 
    ->setParameter('userId', $userId); 

return $qb->getQuery()->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY); 
+1

可能想更接近地阅读这个问题。由于某种原因,他已经获得了一个数组结果。他想要一个对象数组。 – Cerad

0

如果你想对象的数组你不得不设置实体之间的关系,并由关系的拥有方创建查询。

例如:

Tourney entity , Invite entity 

Invite 
    /** 
    * @ORM\ManyToOne(targetEntity="Tourney", inversedBy="invites") 
    */ 
    protected $tourneys; 

Tourney 
    /** 

    * @ORM\OneToMany(targetEntity="Invite", mappedBy="tourneys", cascade={"persist", "remove"}) 
    * @ORM\JoinColumn(nullable=true, onDelete="CASCADE") 
    */ 
    protected $invites; 

现在你必须作出查询,以关系的持有端(邀请) ,它会与Tourneys现场$拿着所有的参加对象数据诚邀

它给你一些对象。基于查询的setter $的

remeber邀请作为setInvites(锦标赛$邀请),并通过关系setTourneys的逆侧(邀请$ tourneys)