Yii2更新条件为数组的位置

时间:2017-05-26 05:01:58

标签: mysql sql arrays 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。任何建议都会得到赞赏。感谢

3 个答案:

答案 0 :(得分:2)

应该是这样的..

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

使用

尝试真正的sql代码
$myRawSql=   $connection->createCommand()->update('user', 
             ['selected' => 'Yes'],['id' => $array])>getRawSql();

var_dump($myRawSql);

答案 1 :(得分:2)

要进行搜索,您可以使用IN条件。即

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

//查询将是:WHERE id IN(1,2,3)

     

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

     

in:操作数1应该是列或DB表达式。操作数2可以   数组或Query对象。它将生成IN条件。   如果操作数2是一个数组,它将代表值的范围   列或DB表达式应该是;如果操作数2是查询   对象,将生成一个子查询并用作范围   列或DB表达式。例如,['in','id',[1,2,3]]将会   生成id IN(1,2,3)。该方法将正确引用该列   范围中的名称和转义值。 in运营商也支持   复合柱。在这种情况下,操作数1应该是一个数组   列,而操作数2应该是数组或查询数组   表示列范围的对象。

所以基本上你需要将你的数组传递给IN进行搜索。

对于更新,您可以在updateAll命令中使用相同的Where语法,即

  

// UPDATE customer SET status = 1 WHERE id IN(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]]);

希望这会有所帮助。感谢。

答案 2 :(得分:1)

您可以使用updateAll查询:

$update = OpUnit::updateAll(['selected' => 'Yes'],['id' => $array]);

它返回更新的行数。

参考:http://www.yiiframework.com/doc-2.0/yii-db-activerecord.html#updateAll()-detail