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; 如果我在控制器中设置了该值,则不应覆盖它。
您可以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)