我在学说中有很多关系(很多结果都是一个投票站):
/**
* @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行,第48行'pollingStation2'附近:错误: 无效的PathExpression。必须是StateFieldPathExpression。
答案 0 :(得分:0)
尝试将此方法放在Result EntityRepository类中:
public function getForSearch($keyWord)
{
$query = $this->createQueryBuilder('r');
$query
->join('r.pollingStation2', 'p')
->where('p.name LIKE :keyword')
->setParameter('keyword', '%' . $keyWord . '%')
//->orderBy('p.', 'ASC')
;
return $query->getQuery()->getResult();
}
答案 1 :(得分:0)
正如@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();
BTW我修复了您的orderBy
,简化了您的where
并修复了错误定义的keyword
参数。