我需要根据字符串从数据库中获取5个不同的日期类型值。当我在phpmyadmin上运行SQL查询时,结果是正确的:
SELECT DISTINCT `date` FROM `collection` WHERE `date` LIKE "%2015-%" ORDER BY `collection`.`date` DESC LIMIT 0,5
结果:
- 2015-12-31
- 2015-12-30
- 2015-12-29
- 2015-11-30
- 2015-11-28
但是,当我用学说构建查询时,它基本上返回了最新的5个日期。看起来"像"陈述被忽略了。这是邮政控制器:
/**
* @Route("/collection/InputHint", name="collectionInputHint")
* @Method("POST")
*/
public function collectionInputHint(Request $request)
{
$string = $request->get('value');
$entity = $request->get('entity');
$entityColumn = $request->get('entity-column');
$entityType = $request->get('entity-type');
$result = array();
$em = $this->getDoctrine()->getManager();
$objects = $em
->getRepository('AppBundle:'.$entity)
->createQueryBuilder($entity)
->select($entity.'.'.$entityColumn)
->distinct($entity.'.'.$entityColumn)
->where($entity.'.'.$entityColumn.' LIKE :string')
->setParameter('string', '%'.$string.'%')
->orderBy($entity.'.'.$entityColumn, 'DESC')
->setMaxResults(5)
->getQuery()
->getResult();
foreach ($objects as $object) {
$value = ($entityType == 'date') ? $object[$entityColumn]->format("Y-m-d") : $object[$entityColumn];
array_push($result, (string)$value);
}
return new Response(json_encode($result));
}
和学说的结果是:
- 2016-01-30
- 2016-01-29
- 2015-12-31
- 2015-12-30
- 2015-12-28
通知前2个结果与$ string的结果不如其余结果相似。另外,如果我将订单更改为ASC,则与2013年相比有5个日期,因此订单在这里不是问题。有什么想法吗?
我认为这一行是问题,当我第一次看时应该很明显:
->setParameter('string', '"%'.$string.'%"')
更改它,我很确定它会起作用!
好吧,我发现了问题。事实证明,$字符串实际上是空的,所以查询看起来像:...在哪里'date'like'%%'...
在JS中,我试图从错误/不存在的对象中获取字符串。
js修复后最终是正确的,因此控制器代码正常工作。