我正在使用像
这样的查询构建器$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
是否有可能以另一种方式写出来? 请帮帮我。
答案 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);