【问题标题】:Is there any way to set multiple LIKE options inside where clause in cakephp 3有没有办法在 cakephp 3 的 where 子句中设置多个 LIKE 选项
【发布时间】:2018-09-11 19:05:17
【问题描述】:

我想检索在多个部分 prase 上与一列匹配的所有行。我的情况可以解释为以下原始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?

注意:我使用 mysql 作为 DBMS。

【问题讨论】:

  • 不能链接OrWhere吗?

标签: sql cakephp-3.0


【解决方案1】:

也许您可以使用 Collection 来创建一个合适的数组,但我认为 foreach 循环将在相同数量的代码中完成这项工作。所以这是我的解决方案,假设 $query 存储您的 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 中弃用

【讨论】:

  • 感谢您的宝贵时间。假设,我有一个像 $arr= array('abc'); 这样的数组如何修改您的答案以用我的 $arr 变量替换硬代码 %abc%?
  • 对不起,我错过了你问题的数组部分,请参阅我的新答案
  • @arilia 谢谢!
猜你喜欢
  • 2020-07-05
  • 1970-01-01
  • 2012-03-04
  • 1970-01-01
  • 1970-01-01
  • 2012-05-15
  • 2020-09-04
  • 2021-11-11
  • 1970-01-01
相关资源
最近更新 更多