Symfony 如何在DQL中使用LIKE子句?
我正在尝试使用条令查询语言中的LIKE子句创建一个查询 我的问题如下:Symfony 如何在DQL中使用LIKE子句?,symfony,dql,Symfony,Dql,我正在尝试使用条令查询语言中的LIKE子句创建一个查询 我的问题如下: public function findByName($keyword){ $em = $this->getEntityManager(); $consulta = $em->createQuery('SELECT o FROM AppBundle:Items o WHERE o.name LIKE :keyword'); $consulta->setParameter('keywo
public function findByName($keyword){
$em = $this->getEntityManager();
$consulta = $em->createQuery('SELECT o FROM AppBundle:Items o WHERE o.name LIKE :keyword');
$consulta->setParameter('keyword', '%'.$keyword.'%');
return $consulta->getResult();
}
我将得到下一个错误:
Notice: Trying to access array offset on value of type null
如果我执行相同的查询,而不是简单地使用=,则查询将正确执行,并得到结果。我在这里做错了什么
谢谢你的帮助
调试信息:
objectDoctrine\ORM\Query901 24{
[\u state:Doctrine\ORM\Query:private]=>int2
[\u解析类型:条令\ORM\Query:private]=>array0{}
[\u dql:Doctrine\ORM\Query:private]=>string57从中选择o
AppBundle:Coche o其中o.modelo=:关键字
[\u parserResult:Doctrine\ORM\Query:private]=>NULL
[\u firstResult:Doctrine\ORM\Query:private]=>NULL
[\u maxResults:Doctrine\ORM\Query:private]=>NULL
[\u queryCache:Doctrine\ORM\Query:private]=>NULL
[\u expireQueryCache:Doctrine\ORM\Query:private]=>boolfalse
[\u queryCacheTTL:Doctrine\ORM\Query:private]=>NULL
[\u useQueryCache:Doctrine\ORM\Query:private]=>booltrue
[参数:受保护]=>
objectDoctrine\Common\Collections\ArrayCollection946 1{
[元素:条令\Common\Collections\ArrayCollection:private]=>
array1{[0]=>ObjectDoctrin\ORM\Query\Parameter913{
[名称:条令\ORM\Query\Parameter:private]=>string7关键字
[值:条令\ORM\Query\Parameter:private]=>int1
[类型:条令\ORM\Query\Parameter:private]=>string7整数
}}}[\u resultsetmap:protected]=>NULL[\u em:protected]=>
objectDoctrine\ORM\EntityManager 740 11{
[配置:条令\ORM\EntityManager:private]=>
objectDoctrine\ORM\Configuration564 1{
[\u属性:受保护]=>array14{[entityNamespaces]=>
array1{[AppBundle]=>string16 AppBundle\Entity}
[metadataCacheImpl]=>objectDoctrine\Common\Cache\ArrayCache566
6{[data:Doctrine\Common\Cache\ArrayCache:private]=>array0{
}[hitsCount:Doctrine\Common\Cache\ArrayCache:private]=>int0
[misseScont:Doctrine\Common\Cache\ArrayCache:private]=>int0
[正常运行时间:条令\Common\Cache\ArrayCache:private]=>
int1598445780
[名称空间:条令\Common\Cache\CacheProvider:private]=>
string79
sf形式默认值061d80f6e71229c042b639f23634872f7045193d957ba060c640bf0458feeae2
[名称空间版本:条令\Common\Cache\CacheProvider:private]=>
NULL}[queryCacheImpl]=>
您好,我已经尝试过了,但它不起作用,我的实体有一个存储库,其中有这个查找方法。我必须直接在控制器中创建查询吗?我在存储库中尝试了查询生成器方法,但它对我不起作用。谢谢您的帮助。我得到一个错误,即不存在getQuery方法。使用getDQL,我也得到了同样的结果我在创建查询时使用的DQL。我将继续调查可能导致问题的原因,如果我找到一个答案,并发布它是否对将来的人有帮助。感谢大家的耐心!您好,我刚刚发现,更改了一行条令代码,我能够使用like子句获得结果,我不知道为什么或如何获得结果d我的条令代码中有任何错误,但如果它对任何人都有帮助,那就是错误。谢谢大家的帮助!在op.@xypher中添加了解决方案。要回答您自己的问题,您应该使用答案部分。谢谢!
public function LikeExpression()
{
$stringExpr = $this->StringExpression();
$not = false;
if ($this->lexer->isNextToken(Lexer::T_NOT)) {
$this->match(Lexer::T_NOT);
$not = true;
}
$this->match(Lexer::T_LIKE);
if ($this->lexer->isNextToken(Lexer::T_INPUT_PARAMETER)) {
$this->match(Lexer::T_INPUT_PARAMETER);
$stringPattern = new AST\InputParameter($this->lexer->token['value']);
} else {
$stringPattern = $this->StringPrimary();
}
$escapeChar = null;
//////// Highlighted error area//////////
if ($this->lexer->lookahead['type'] === Lexer::T_ESCAPE) {
$this->match(Lexer::T_ESCAPE);
$this->match(Lexer::T_STRING);
$escapeChar = new AST\Literal(AST\Literal::STRING, $this->lexer->token['value']);
}
////////////////////////////////////////
$likeExpr = new AST\LikeExpression($stringExpr, $stringPattern, $escapeChar);
$likeExpr->not = $not;
return $likeExpr;
}