Yii2处理行为中的beforesave事件

时间:2018-03-10 11:47:39

标签: php yii2 yii2-basic-app

我尝试使用yii2框架开发应用程序,我使用beforeSave事件来处理createdAt和updatedAt with time()函数,这个方法是:

UserAndTags

我只是想将此方法移动到行为并将其附加到我的模型,我创建行为类并将行为附加到模型但它不起作用abd将null传递给数据库,我的行为类是:

UserAndTagEntity

我模型中的附加代码是:

Tag

请帮助我以正确的方式处理这个问题,非常感谢:)。

2 个答案:

答案 0 :(得分:1)

您可以使用TimeStampBehavior执行此操作。如果您已将created_at, updated_atint(11)声明为UNIX timestamp

use yii\behaviors\TimestampBehavior;

public function behaviors()
{
    return [
        TimestampBehavior::className(),
    ];
}

但是,由于您的属性名称不同或者您想使用不同的方式计算时间戳,您可以配置$createdAtAttribute$updatedAtAttribute$value属性,如下所示:< / p>

use yii\db\Expression;
use yii\behaviors\TimestampBehavior;

public function behaviors()
{
    return [
        [
            'class' => TimestampBehavior::className(),
            'createdAtAttribute' => 'createdAt',
            'updatedAtAttribute' => 'updatedAt',
            'value' => new Expression('NOW()'),
        ],
    ];
}

答案 1 :(得分:0)

通过在创建表时将created_atupdated_at的类型标识为timestamp,您可以通过简单的方式执行此操作,并且当它将自动填入数据库时您添加新记录或更新现有记录。

示例:

     'created_at'=> $this->timestamp(),
     'updated_at'=> $this->timestamp(),

注意:您可以使用以下链接找到有关创建表格的更多信息:Yii2 Migration