【问题标题】:"IN" and "NOT IN" in CakePHP3 [duplicate]CakePHP3中的“IN”和“NOT IN”
【发布时间】:2017-12-01 17:30:26
【问题描述】:

Cookbook 中有一个例子:

$query = $cities->find()
   ->where(function ($exp, $q) {
      return $exp->notIn('country_id', ['AFG', 'USA', 'EST']);
});

在 SQL 中,这应该等同于: WHERE country_id NOT IN ('AFG', 'USA', 'EST')

现在,我正在尝试在这里使用一个变量。可悲的是,这行不通:

$query = $cities->find()
   ->where(function ($exp, $q, $variable) {
      return $exp->notIn('country_id', $variable);
});

有什么想法吗?

【问题讨论】:

  • function ($exp, $q) use($variable)
  • 我完全忘记了特质,谢谢,先生
  • 你的意思是变量继承,特征是完全不同的东西;)
  • 但是为什么不能通过普通函数参数传递变量呢?

标签: php sql scope closures cakephp-3.0


【解决方案1】:

它适用于“使用”,请参阅:PHP: Anonymous Functions

$query = $cities->find()
   ->where(function ($exp, $q) use ($variable) {
      return $exp->notIn('country_id', $variable);
});

【讨论】:

    【解决方案2】:

    我总是发现在 CakePHP 中使用 IN 和 NOT IN 的最简单方法如下

    $query = $cities->find()
       ->where(['country_id IN' => $variable])
    

    有关自动生成子句的更多信息,请参见本书的以下链接。您还可以使用它将值自动转换为列的类型。对我来说,它也更具可读性。

    https://book.cakephp.org/3.0/en/orm/query-builder.html#automatically-creating-in-clauses

    【讨论】:

    • 谢谢!效果更好!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    相关资源
    最近更新 更多