Zend3 iLike 在 Postgresql 中搜索
Zend3 iLike Search in Postgresql
我的 table 数据库 Postgresql 中有数据,既有小写也有大写,例如。 'Apple'。
我有一个搜索输入文本字段。我如何将数据库中的数据转换为小写,以便在我的文本字段中键入 'apple' 时 returns 'Apple'。
$select->where->like(Fruit::fruit_name, "%" . strtoupper($fruitName) . "%");
你应该使用 expression
来做到这一点,或者只使用 where
而不使用 like。
If you provide a string, this string will be used to create a Zend\Db\Sql\Predicate\Expression instance, and its contents will be applied as-is, with no quoting:
您是否尝试过以下方法:
$select->where(sprintf('%s iLIKE %%%s%%', Fruit::fruit_name, strtoupper($fruitName));
已找到解决方案:
use Zend\Db\Sql\Expression;
$upperExpr = new Expression('LOWER(?)', [Fruit::fruit_name], [Expression::TYPE_IDENTIFIER]);
$select->where->like($upperExpr, "%" . mb_strtolower($fruitName, 'UTF-8') . "%");
或者仅 strtolower() 如果您没有 'äÄöÖüÜ' ;)
这将创建正确的 SQL-语句。
我的 table 数据库 Postgresql 中有数据,既有小写也有大写,例如。 'Apple'。 我有一个搜索输入文本字段。我如何将数据库中的数据转换为小写,以便在我的文本字段中键入 'apple' 时 returns 'Apple'。
$select->where->like(Fruit::fruit_name, "%" . strtoupper($fruitName) . "%");
你应该使用 expression
来做到这一点,或者只使用 where
而不使用 like。
If you provide a string, this string will be used to create a Zend\Db\Sql\Predicate\Expression instance, and its contents will be applied as-is, with no quoting:
您是否尝试过以下方法:
$select->where(sprintf('%s iLIKE %%%s%%', Fruit::fruit_name, strtoupper($fruitName));
已找到解决方案:
use Zend\Db\Sql\Expression;
$upperExpr = new Expression('LOWER(?)', [Fruit::fruit_name], [Expression::TYPE_IDENTIFIER]);
$select->where->like($upperExpr, "%" . mb_strtolower($fruitName, 'UTF-8') . "%");
或者仅 strtolower() 如果您没有 'äÄöÖüÜ' ;)
这将创建正确的 SQL-语句。