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

时间:2017-09-07 08:23:22

标签: casting dql

我需要根据用户的关键字过滤实体。比如,用户输入“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导致错误。如何将这些整数和日期转换为DQL中的字符串?我不能只做->orWhere('street.id = :query'),因为用户可以输入“街道”搜索字词。

1 个答案:

答案 0 :(得分:3)

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

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

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