Yii-2 如何根据 id 更新记录

Yii-2 how to update a record on basis of id

我想更新我的 table/model。场景是,我有一个 'status' 列,我想将此列 SET 设为一个值,然后根据 id 更新模型。我想做一些类似 update 的声明。

Update 'table' SET status = 'status value' where id = 'myid'

我的action controller长得像

$model = $this->findModel($id);
$ogp_id = $model->id;
$status = $model->status;

我已经搜索过了,但找不到解决方案

任何帮助将不胜感激

这样试试,

  $model =Table::find($id);
    $model->status = 'Active';
    $model->save();

也可以直接使用Create命令如下:

Yii::$app->db->createCommand("UPDATE table SET status=:status WHERE id=:id")
->bindValue(':id', your_id)
->execute();

用于检索 $id 相关模型 如果 id 是主键,你可以使用 findOne($id)

$model =YourModel::findOne($id);
$model->status = 'Active';
$model->save();

一般情况下还是find()->Where()->one()

$model =YourModel::find()-where(['id'=>$id])->one();
$model->status = 'Active';
$model->save();

如果您的验证规则失败,您可以尝试使用 $model->save(false); 如果在这种情况下,e 行被更新为薄意味着您的一些数据不遵守验证规则..并且您应该检查这个

这对我有用

我添加了一个功能

 protected function findModel($id)
{
    if (($model = Ogpheader::findOne($id)) !== null) {
        return $model;
    } else {
        throw new NotFoundHttpException('The requested page does not exist.');
    }
}

然后在controller里面访问

$model = $this->findModel($id);
$ogp_id = $model->id;

然后在保存我的模型时我做了以下操作

if($m->save())
{
   $model->status = Ogpheader::$status_titles[1];
   $model->update();
   //my other code
}

这已更新我的 table 并根据需要设置列