2017-05-26 54 views
0

這是更新代碼Yii2更新中條件數組

$clients = OpClient::find(['id'])->where(['status'=>'Active'])->all(); 

    foreach($clients as $client) 
    { 
     $array[] = $client['unit_id']; 
     $unit = OpUnit::find()->where(['id'=>$array]); 

     file_put_contents('test.txt',print_r($client['unit_id'],true)); 

     $connection = Yii::$app->db; 
     $connection->createCommand()->update('op_unit', ['selected' => 'Yes'], 'id='.$array.'')->execute(); 
    } 

我應該如何在更新查詢其中ID是一個數組類型?它不斷顯示錯誤Array to string conversion。任何建議都會得到讚揚。由於

回答

2

應該是這樣..

$connection->createCommand()->update('user', 
      ['selected' => 'Yes'],['id' => $array])->execute(); 

嘗試使用

$myRawSql= $connection->createCommand()->update('user', 
      ['selected' => 'Yes'],['id' => $array])>getRawSql(); 

var_dump($myRawSql); 
+0

我也試過。它顯示沒有錯誤,但數據庫沒有更新:/ – ron

+0

通過'var_dump($ connection-> createCommand() - > update('user', ['selected'=>'Yes'],['' id'=> $ array]) - > createCommand() - > rawSql); die;' – Yupik

+0

嘗試檢查真正的rawSql創建..答案更新與建議 – scaisEdge

1

搜索可以使用IN條件的真正的SQL代碼。即

->andWhere(['in', 'id', [1, 2, 3]]) 

//查詢將是:WHERE ID。在(1,2,3)

http://www.yiiframework.com/doc-2.0/guide-db-query-builder.html

在:操作數1應該是一列或DB表達。操作數2可以是數組或查詢對象的 。它會產生一個IN條件。 如果操作數2是一個數組,它將表示列或DB表達式應該是的值 的範圍;如果操作數2是查詢 對象,則會生成子查詢並將其用作 列或數據庫表達式的範圍。例如,['in','id',[1,2,3]] 生成id IN(1,2,3)。該方法將正確引用列中的 名稱和範圍內的轉義值。 in運算符還支持 組合列。在這種情況下,操作數1應該是 列的數組,而操作數2應該是表示列的範圍的數組的數組或者查詢 對象。

所以基本上你需要將你的數組傳遞給IN進行搜索。

對於更新可以使用相同凡語法updateAll命令即

// UPDATE SET customerstatus = 1 WHERE ID。在(1,2,3) http://www.yiiframework.com/doc-2.0/guide-db-active-record.html#updating-multiple-rows

Customer::updateAll(['status' => Customer::STATUS_ACTIVE], ['in', 'id', [1, 2, 3]]); 

希望這有助於。謝謝。

+0

你不必使用'in'。使用'['id'=> $ array]'(其中'$ array'真的是數組)會產生'in'條件,導致查詢構建器檢查,如果value是數組。 – Yupik

+0

我會研究它。感謝您的建議 – ron