在 DQL 中将整数和日期转换为字符串
Casting integers and dates to strings in 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')
因为用户可以输入 "street" 搜索词。
我无法为此找到任何 DQL 关键字(您可能需要自定义 Doctrine 函数),但可以通过其他方式完成。如果你写:
->orWhere("CONCAT(street.id, '') LIKE :query")
->orWhere("CONCAT(street.lastUpdated, '') LIKE :query")
转换为字符串将隐式完成,使用 LIKE 运算符应该没有问题。
我需要根据用户的关键字过滤实体。比如,用户输入“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')
因为用户可以输入 "street" 搜索词。
我无法为此找到任何 DQL 关键字(您可能需要自定义 Doctrine 函数),但可以通过其他方式完成。如果你写:
->orWhere("CONCAT(street.id, '') LIKE :query")
->orWhere("CONCAT(street.lastUpdated, '') LIKE :query")
转换为字符串将隐式完成,使用 LIKE 运算符应该没有问题。