2016-04-26 77 views
0

我工作的这一段代码:Cakephp3传递一个数组到条件

public function validateSelected($array = [1, 2]) 
{ 
    $this->autoRender = false; 
    $samples = TableRegistry::get('Samples'); 
    $samples->query() 
     ->update() 
     ->set(['validate' => true]) 
     ->where(function ($exp, $q) { 
      return $exp->in('id', $q); 
     }) 
     ->execute(); 
} 

的代码是相当多的自我解释,我想更新所有的ID,将在传递的行数组到该函数。

我做这个测试的代码:

->where(function ($exp, $q) { 
      return $exp->in('id', [1, 2, 3]); 
     }) 

而且其工作正常,但我不能传递的数组参数传递到这个地方的条件,因为它给出了一个语法错误未声明的变量$阵列。

任何关于如何实现这件事的想法都会很棒。

回答

1

可以使用use语言结构包括外部变量到匿名函数

$ids = [1, 2, 3]; 
->where(function ($exp, $q) use($ids) { 
     return $exp->in('id', $ids ]); 
    }) 

,但你可以简单地做

->where(['id IN' => $ids]) 

或也

->where(['id' => $ids], ['id' => 'integer[]']) 

看到manual

+0

非常感谢,工作。你能否解释未知函数中第二个参数的用途? –

+1

我想这是因为有时你需要访问匿名函数中的一些$查询方法。有关示例,请参见[本段](http://book.cakephp.org/3.0/en/orm/query-builder.html#case-statements) – arilia

+0

感谢您的回应。 –