代码之家  ›  专栏  ›  技术社区  ›  Forseti

在DQL中将整数和日期转换为字符串

  •  0
  • Forseti  · 技术社区  · 7 年前

    我需要根据用户的关键字过滤实体。比如说,用户输入“12”,我需要在定义的文本字段、ID或日期中找到具有该“12”的qall实体。

    目前我有这样的表达:

    $qb = $em->createQueryBuilder();
    $qb->select('entity')
       ->from('streets', 'street')
       ->join('street.zone', 'zone')
       ->join('zone.city', 'city')
       ->orWhere('LOWER(zone.name) LIKE :query')
       ->orWhere('LOWER(city.name) LIKE :query')
       ->orWhere('LOWER(street.name) LIKE :query')
       ->orWhere('street.id LIKE :query')
       ->orWhere('street.lastUpdated LIKE :query')
       ->setParameter('query', '%'.strtolower($searchQuery).'%')
    ;
    

    orWhere s导致错误。如何将这些整数和日期转换为DQL中的字符串?我不能这么做 ->orWhere('street.id = :query') 因为用户可以输入“street”搜索词。

    1 回复  |  直到 7 年前
        1
  •  4
  •   Arian Sobczak    7 年前

    我找不到任何用于此的DQL关键字(您可能需要自定义条令函数),但可以通过其他方式完成。如果你写:

        ->orWhere("CONCAT(street.id, '') LIKE :query")
        ->orWhere("CONCAT(street.lastUpdated, '') LIKE :query")
    

    对字符串的转换将隐式完成,使用LIKE运算符应该没有问题。