Mysql Yii2更新,其中条件为数组
这是更新代码Mysql Yii2更新,其中条件为数组,mysql,sql,arrays,yii2,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_con
$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是数组,我应该如何键入更新查询?它不断显示错误
数组到字符串的转换
。任何建议都将被告知。谢谢应该这样
$connection->createCommand()->update('user',
['selected' => 'Yes'],['id' => $array])->execute();
使用以下命令尝试真正的sql代码
$myRawSql= $connection->createCommand()->update('user',
['selected' => 'Yes'],['id' => $array])>getRawSql();
var_dump($myRawSql);
应该是这样
$connection->createCommand()->update('user',
['selected' => 'Yes'],['id' => $array])->execute();
使用以下命令尝试真正的sql代码
$myRawSql= $connection->createCommand()->update('user',
['selected' => 'Yes'],['id' => $array])>getRawSql();
var_dump($myRawSql);
要进行搜索,可以在条件中使用
。i、 e
->andWhere(['in', 'id', [1, 2, 3]])
//查询将是:其中id位于(1、2、3)
in:操作数1应为列或DB表达式。操作数2可以是
数组或查询对象。它将生成一个IN条件。
如果操作数2是数组,则它将表示值的范围
列或DB表达式应为:;如果操作数2是查询
对象,将生成一个子查询并将其用作
列或DB表达式。例如,['in','id',[1,2,3]]将
在(1,2,3)中生成id。该方法将正确引用该列
范围中的名称和转义值。in操作符还支持
组合柱。在这种情况下,操作数1应该是
列,而操作数2应为数组数组或查询
对象,表示列的范围
因此,基本上您需要将数组传递给IN进行搜索
对于更新,您可以在updateAll命令中使用相同的Where语法,即
//更新客户
设置状态
=1,其中id位于(1,2,3)
希望这有帮助。谢谢。要进行搜索,您可以在
条件下使用。i、 e
->andWhere(['in', 'id', [1, 2, 3]])
//查询将是:其中id位于(1、2、3)
in:操作数1应为列或DB表达式。操作数2可以是
数组或查询对象。它将生成一个IN条件。
如果操作数2是数组,则它将表示值的范围
列或DB表达式应为:;如果操作数2是查询
对象,将生成一个子查询并将其用作
列或DB表达式。例如,['in','id',[1,2,3]]将
在(1,2,3)中生成id。该方法将正确引用该列
范围中的名称和转义值。in操作符还支持
组合柱。在这种情况下,操作数1应该是
列,而操作数2应为数组数组或查询
对象,表示列的范围
因此,基本上您需要将数组传递给IN进行搜索
对于更新,您可以在updateAll命令中使用相同的Where语法,即
//更新客户
设置状态
=1,其中id位于(1,2,3)
希望这有帮助。谢谢。您可以使用updateAll
查询:
$update = OpUnit::updateAll(['selected' => 'Yes'],['id' => $array]);
它返回更新的行数
请参阅:您可以使用updateAll
查询:
$update = OpUnit::updateAll(['selected' => 'Yes'],['id' => $array]);
它返回更新的行数
参考:我也试过这个。它没有显示错误,但数据库没有更新:/Check生成的sql查询byvar\u dump($connection->createCommand()->update('user',['selected'=>'Yes'],['id'=>$array])->createCommand()->rawSql);死亡代码>尝试检查创建的真实rawSql。。答案更新为SuggestionKayy。让我先试试,我也试过了。它没有显示错误,但数据库没有更新:/Check生成的sql查询byvar\u dump($connection->createCommand()->update('user',['selected'=>'Yes'],['id'=>$array])->createCommand()->rawSql);死亡代码>尝试检查创建的真实rawSql。。答案更新为SuggestionKayy。让我先试试你不必在
中使用。使用['id'=>$array]
(其中$array
实际上是array)将在条件下生成,导致查询生成器检查值是否为array。我将查看它。感谢您的建议,您不必在
中使用。使用['id'=>$array]
(其中$array
实际上是array)将在条件下生成,导致查询生成器检查值是否为array。我将查看它。感谢您的建议,我的id在数组中时仍然无法更新(['1','2'])
。我可以在将值放入id时进行更新(示例1)。为什么?当我的id在数组(['1','2'])中时,我仍然无法更新。我可以在将值放入id时进行更新(示例1)。为什么?