2016-04-26 80 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

感謝您的迴應。 –