有什么方法可以在 cakephp 3 的 where 子句中设置多个 LIKE 选项
Is there any way to set multiple LIKE options inside where clause in cakephp 3
我想检索与列匹配的多个部分短语的所有行。我的情况可以解释如下 raw sql:
SELECT *
FROM TABLENAME
WHERE COLUMN1 LIKE %abc%
OR COLUMN1 LIKE %bcd%
OR COLUMN1 LIKE %def%;
这里abc,bcd,def是数组元素。即:array('abc','bcd','def')
。有什么方法可以编写传递此数组的代码以使用 cakephp 3 形成上述原始 sql?
N.B:我正在使用 mysql 作为 DBMS。
您可能可以使用 Collection 创建一个合适的数组,但我认为 foreach 循环可以用相同数量的代码完成这项工作。所以这是我的解决方案,假设 $query
存储您的查询对象
$a = ['abc','bcd','def'];
foreach($a as $value)
{
$or[] = function ($exp, $q) use ($value) {
return $exp->like('column1', '%'.$value.'%');
};
}
$query->where(['or' => $or]);
您也可以使用 orWhere()
,但我发现它会在 3.6
中被弃用
我想检索与列匹配的多个部分短语的所有行。我的情况可以解释如下 raw sql:
SELECT *
FROM TABLENAME
WHERE COLUMN1 LIKE %abc%
OR COLUMN1 LIKE %bcd%
OR COLUMN1 LIKE %def%;
这里abc,bcd,def是数组元素。即:array('abc','bcd','def')
。有什么方法可以编写传递此数组的代码以使用 cakephp 3 形成上述原始 sql?
N.B:我正在使用 mysql 作为 DBMS。
您可能可以使用 Collection 创建一个合适的数组,但我认为 foreach 循环可以用相同数量的代码完成这项工作。所以这是我的解决方案,假设 $query
存储您的查询对象
$a = ['abc','bcd','def'];
foreach($a as $value)
{
$or[] = function ($exp, $q) use ($value) {
return $exp->like('column1', '%'.$value.'%');
};
}
$query->where(['or' => $or]);
您也可以使用 orWhere()
,但我发现它会在 3.6