从学说中的数据库中获取类似于字符串的日期

问题描述 投票:0回答:2

我需要根据字符串从数据库中获取 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

但是当我使用 Doctrine 构建查询时,它基本上返回最新 5 个日期。看起来“LIKE”语句被忽略了。这是 POST 控制器:

/**
 * @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 个日期,因此这里的顺序不是问题。有什么想法吗?

php date symfony doctrine-orm
2个回答
1
投票

我认为这一行是问题所在,当我第一次看时应该很明显:

->setParameter('string', '"%'.$string.'%"')

改变它,我相当确定它会起作用!


0
投票

好的,我发现问题了。结果发现 $string 实际上是空的,所以查询看起来像: ...WHERE 'date' LIKE '%%'...

在 JS 中,我试图从错误/不存在的对象中获取字符串。

JS 修复后,结果最终正确,因此控制器代码工作正常。

© www.soinside.com 2019 - 2024. All rights reserved.