仅当 `create_at` 模型属性为 null 或空白时才更新它

vin*_*ece 2 php yii2 yii2-advanced-app

我正在使用带有 yii2-user 的 YII2 高级应用程序模板。

public function behaviors()
{
    return [
        TimestampBehavior::className(),
    ];
}
Run Code Online (Sandbox Code Playgroud)

这将timestamp在我的用户模型中设置当前值。但我只想添加它,如果它是null; 如果我在控制器中设置了该值,则不应覆盖它。

ste*_*zer 5

您可以TimestampBehavior使用自定义逻辑创建您的:

<?php
namespace app\behaviors;

use yii\db\ActiveRecord;
use yii\base\Behavior;
use yii\db\Expression;

class ARTimestampBehavior extends Behavior
{

    public function events()
    {
        return [
            ActiveRecord::EVENT_BEFORE_INSERT => 'beforeInsert',
            ActiveRecord::EVENT_BEFORE_UPDATE => 'beforeUpdate',
        ];
    }

    public function beforeInsert($event)
    {
        $model = $event->sender;
        if ($model->hasAttribute('created_at') && is_null($model->created_at)) {
            $model->created_at = new Expression('NOW()');
        }
        if ($model->hasAttribute('updated_at')) {
            $model->updated_at = new Expression('NOW()');
        }
    }

    public function beforeUpdate($event)
    {
        $model = $event->sender;
        if ($model->hasAttribute('updated_at')) {
            $model->updated_at = new Expression('NOW()');
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

然后在您的模型中使用它:

public function behaviors()
{
    return [
        ARTimestampBehavior::className(),
    ];
}
Run Code Online (Sandbox Code Playgroud)