我具有此存储库功能,可以在特定日期内选择与图像拟合相关的所有投票:
public function getTopNImages(int $n)
{
$date = date_format(new DateTime('first day of this month'), 'Y-m-d H:i:s');
var_dump($date);
$q2 = $this->createQueryBuilder('aliasi2')
->select('count(v.id)')
->innerJoin('aliasi2.votes', 'v')
->where('aliasi2 = i')
->andwhere("date_diff(v.date, $date) >= 0");
return $this->createQueryBuilder('i')
->select(array(
'i',
'(' . $q2->getDQL() .') votes'
))
->orderBy('votes', 'DESC')
->setMaxResults($n)
->getQuery()
->getResult();
}
我正在使用与MySQL中的日期格式相同,var_dump
输出以下内容:
字符串(19)" 2017-03-01 09:39:34"
但是由于某种原因,我得到了:
[语法错误]第0行,col 137:错误:预期学说 orm query lexer :: t_close_parenthesis,get' - ' - '
这里有什么问题?
您忘了通过简单的引号保护日期,因此Lexer在第一个' - '中失败。
请参阅此处的问题:
"date_diff(v.date, 2017-03-01 09:39:34) >= 0"
您需要这样做:
"date_diff(v.date, '$date') >= 0"
甚至更好地使用setParameter()
您是否尝试过:
$q2 = $this->createQueryBuilder('aliasi2')
->select('count(v.id)')
->innerJoin('aliasi2.votes', 'v')
->where('aliasi2 = i')
->andwhere("date_diff(v.date, :date) >= 0")
->setParameter('date', $date);
刚刚设置日期参数...