如果我在 select 子句中使用来自不同实体的不同字段,我怎样才能得到 Query::HYDRATE_OBJECT

How can I get Query::HYDRATE_OBJECT as a result, if I use different fields from different entities in a select clause

$query = $this->createQueryBuilder('C')
            ->select('C.id, C.name, P.id, P.name')
            ->leftJoin('C.Product', 'P')
            ->getQuery()
            ->getResult();

以上查询 returns HYDRATE_ARRAY,我想要 HYDRATE_OBJECT.

$query = $this->createQueryBuilder('C')
            ->select('partial C.{id, name}, partial P.{id, name}')
            ->leftJoin('C.Product', 'P')
            ->getQuery()
            ->getResult();

你可以得到结果

foreach($query as $q) {
   echo $q->getId().' -- '.$q->getProduct()->getId();
}

如果您想使用任何 mysql 函数,例如 group_concat 并获取 ID

$query = $this->createQueryBuilder('C')
            ->select('C, GROUP_CONCAT(C.id) AS ids, partial P.{id, name}')
            ->leftJoin('C.Product', 'P')
            ->getQuery()
            ->getResult();

foreach($query as $q) {
   echo $q[0]->getId().' -- '.$q[0]->getProduct()->getId().' -- '.$q['ids'];
}

在这里您可以获取类别 table 的所有字段、类别 table 的组 ID 和产品 table 字段

谢谢

阿肖克·奇特罗达

你可以的。

/**
 * return all devices enabled to array
 *
 * @return array
 */
private function getAllDevicesToArray()
{
    // return to array not object
    return $this->getDoctrine()
        ->getRepository('AdminBundle:Device')
        ->createQueryBuilder('d')
        ->where('d.enabled = :enabled')
        ->setParameter('enabled', 1)
        ->getQuery()
        ->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);
}