当前位置:  开发笔记 > 编程语言 > 正文

在Yii2中,beforeSave与更新操作相同

如何解决《在Yii2中,beforeSave与更新操作相同》经验,为你挑选了1个好方法。

为什么yii2标识actionUpdate是相同的actionCreate。我为什么这么说:情况就是这样

我有很多字段,例如name, created_by想在数据库中使用一个特殊字段,要auto_increment(但不能使用主键)。该字段被命名nomor_surat(英文:letter_number)

因此,如果要插入的新记录no_surat将是1,2,3,4,依此类推。然后我决定像这样创建动作beforeSave():

public function beforeSave($insert) {
    parent::beforeSave($insert);

    $nomor = Request::find()->select('max(nomor_surat) as max')->scalar();
    $this->nomor_surat = $nomor + 1;

    return parent::beforeSave($insert);
}

在actionCreate中,其成功。假设no_surat = 1

但是,如果我更新了no_surat_1,假设我想在此记录中命名,则no_suart是change = 2

请指教。



1> Bizley..:

$insert变量实际上是在告诉您这是创建还是更新操作。这是布尔值,即true是否要插入false模型以及是否要更新模型。

而且您在示例中使用了错误的逻辑。它应该是:

public function beforeSave($insert)
{
    if (parent::beforeSave($insert)) {
        if ($insert) { // only on insert
            $nomor = Request::find()->select('max(nomor_surat) as max')->scalar();
            $this->nomor_surat = $nomor + 1;
        }
        return true;
    }
    return false;
}

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有