查询构建器提供异常

时间:2015-03-08 05:52:44

标签: symfony doctrine query-builder

我正在使用像

这样的查询构建器
$querym =$querym->select('DISTINCT(a.id)') ->where ('a.doctorid =:u')
                                                              ->setParameter('u', $u);

$query =$query->select('DISTINCT(d.id),d.name,d.dob,d.mobile')

                                                    ->innerJoin('d.PatientSymptoms','ps')
                                                    ->innerJoin('ps.symptoms', 's')

                                                    ->andWhere('ps.symptoms =:name')
                                                    ->where($query->expr()->In('d.id', $querym))
                                                    ->setParameter('name', $name);

给了我     Error: Method Doctrine\Common\Collections\ArrayCollection::__toString() must not throw an exception

是否有可能以另一种方式写出来? 请帮帮我。

1 个答案:

答案 0 :(得分:1)

你可以使用getDql()方法(但我认为当子查询有参数时它会失败):

$querym = $querym->select('DISTINCT(a.id)') ->where ('a.doctorid =' . (int) $u);

$query = $query->select('DISTINCT(d.id),d.name,d.dob,d.mobile')->...->where($query->expr()->In('d.id', $querym->getDql()));

你也可以使用2个查询(如Derick F所说),类似的东西:

$ids = array();
$querym = $querym->select('DISTINCT(a.id)') ->where ('a.doctorid = :u')->setParameter('u',$u);
$as = $querym->getQuery()->getArrayResult();
foreach ($as as $a) $ids[] = $a[1];

$query = $query->select('DISTINCT(d.id),d.name,d.dob,d.mobile')->...->where("d.in (:ids)")->setParameter('ids',$ids);