我在理论上有ManyToOne关系(许多结果传给One PollingStation):
/**
* @ORM\ManyToOne(targetEntity="Iballot\CmsBundle\Entity\PollingStation2", inversedBy="results", cascade={"persist"})
* @ORM\JoinColumn(nullable=false)
* @Expose
*/
private $pollingStation2;
我想搜索属于投票站且名称与关键字相似的所有结果。我尝试使用以下方法,但是它不起作用:
public function getForSearch($keyWord)
{
$query = $this->_em->createQueryBuilder();
$query
->select('r')
->from('IballotCmsBundle:Result', 'r')
->where($query->expr()->like('p.pollingStation2', $query->expr()->literal('%' . $keyWord . '%')))
//->orderBy('p.', 'ASC')
->getQuery()
->setParameter('keyWord', '%'.$keyWord.'%');
return $query->getQuery()->getResult();
}
我收到以下错误
[语义错误]第0行,“ pollingStation2”附近的第48列:错误:无效的PathExpression。必须是StateFieldPathExpression。
正如@Cerad所说的(再过一次),您需要JOIN
在构建查询时使关联的实体可用。
试试这个 :
$query = $this->_em->createQueryBuilder();
$query
->select('r')
->from('IballotCmsBundle:Result', 'r')
->leftJoin('r.pollingStation2', 'p') // The missing join
->where('p.name LIKE :keyword') // where p.name like %keyword%
->setParameter('keyword', '%'.$keyword.'%')
->orderBy('p.name', 'ASC') // order by p.name ASC
->getQuery()
return $query->getResult();
顺便说一句,我修复了您orderBy
,简化了您where
并修复了keyword
错误定义的参数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句