【问题标题】:Yii2: not able to update column value by + 1Yii2:无法通过 + 1 更新列值
【发布时间】:2016-04-14 12:25:58
【问题描述】:

创建新记录时,我需要将列值更新 + 1:

public function actionCreate()
    {
        $model = new CreateBookings();
        if ($model->load(Yii::$app->request->post())) {
            Yii::$app->db->createCommand("UPDATE room_types SET total_booked = total_booked + 1 WHERE room_type = '$model->room_type' ")->execute();
            $model->save();
            return $this->redirect(['view', 'id' => $model->id]);
            } else {
                 return $this->render('create', [
                 'model' => $model,
                 ]);
            }
    }

我做错了什么请指导:)

【问题讨论】:

  • 是否因某种原因对确切的错误消息或意外行为进行了分类?
  • 我没有收到任何错误,但它也没有返回任何结果
  • 如果似乎最好在成功save() 记录后立即更新计数器。 if ($model->save()) { /*update counter and redirec*/ }
  • @SiZE.. 它也不起作用
  • @SiZE 如何使用`Yii::$app->db->createCommand("UPDATE room_types SET total_booked = total_booked + 1 WHERE room_type = '$model->room_type'")-> execute();` 查询行为?

标签: php mysql activerecord yii yii2


【解决方案1】:

试试这个:

 Yii::$app->db->createCommand("UPDATE room_types SET total_booked=total_booked+1 WHERE room_type = '$model->room_type' ")->execute();

public function actionCreate()
    {
        $model = new CreateBookings();
        if ($model->load(Yii::$app->request->post())) {

    $RoomType = new room_types(); // room type replace with model name
    $RoomType->updateCounters(['total_booked' => 1]);

      $model->save();
            return $this->redirect(['view', 'id' => $model->id]);
        } else {
            return $this->render('create', [
                'model' => $model,
            ]);
        }
    }

官方link

【讨论】:

  • 它没有增加计数器
  • 你为 room_types 创建模型了吗?像 CreateBookings()
  • 是的,它已经存在 $types = new Roomtypes();... updateCounter 函数应该在模型保存后运行,因为我在 actionUpdate 中尝试过它工作正常,但在 actionCreate 中不工作
  • 我明白了!更新当前 AR 对象的一个​​或多个计数器列。它不适用于 actionCreate。
  • 检查我更新的答案并从我的答案中复制查询,我认为有空间问题total_booked+1
【解决方案2】:

您应该喜欢以下代码:

    $post = \backend\models\Posts::find()->where(['postID' => 25])->one();
    $post->updateCounters(['total_booked' => 1]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多