这是更新代码
$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
。任何建议都会得到赞赏。感谢
答案 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
SETstatus
= 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