有什么方法可以在 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

中被弃用