时间戳行为在Yii2中不起作用
以上代码用于我的控制器行为函数。创建或更新时,“创建时间”和“更新时间”字段不会按当前时间更新。这些字段的类型设置为datetime。请您帮忙。试试这个,它对我有用:时间戳行为在Yii2中不起作用,yii2,Yii2,以上代码用于我的控制器行为函数。创建或更新时,“创建时间”和“更新时间”字段不会按当前时间更新。这些字段的类型设置为datetime。请您帮忙。试试这个,它对我有用: public function behaviors() { return [ 'verbs' => [ 'class' => VerbFilter::className(), 'actions' => [ 'd
public function behaviors()
{
return [
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'delete' => ['post'],
],
],
'access' => [
'class' => AccessControl::className(),
'only' => ['create', 'update', 'delete', 'view', 'index'],
'rules' => [
// allow authenticated users
[
'allow' => true,
'roles' => ['@'],
],
// everything else is denied by default
],
],
[
'class' => TimestampBehavior::className(),
'attributes' => [
ActiveRecord::EVENT_BEFORE_INSERT => ['create_time', 'update_time'],
ActiveRecord::EVENT_BEFORE_UPDATE => ['update_time'],
],
],
];
}
您必须在模型的行为方法中声明它 要使用TimestampBehavior,请向ActiveRecord类插入以下代码
还必须添加值并使用类表达式
public function behaviors()
{
return [
'class' => TimestampBehavior::className(),
'attributes' => [
ActiveRecord::EVENT_BEFORE_INSERT => ['create_time', 'update_time'],
ActiveRecord::EVENT_BEFORE_UPDATE => ['update_time'],
],
];
}
你也可以使用
use yii\behaviors\TimestampBehavior;
use yii\db\Expression;
public function behaviors()
{
return [
'timestamp' => [
'class' => 'yii\behaviors\TimestampBehavior',
'attributes' => [
ActiveRecord::EVENT_BEFORE_INSERT => ['created_at', 'updated_at'],
ActiveRecord::EVENT_BEFORE_UPDATE => ['updated_at'],
],
'value' => new Expression('NOW()'),
],
];
}
如果您想使用PHP日期时间。我使用了
新表达式('NOW()')
来存储当前时间戳。但它不会根据当前时区存储日期。相反,它基于服务器时间进行存储
我只是用普通的php日期函数来解决这个问题
例如:
但我认为这只适用于MySQL。任何其他RDBMS都可能标记错误。这是Yii2开发人员应该考虑的问题。为什么人们一次又一次地使用int字段来存储时间戳?这是个糟糕的主意。@AndrewMcLagan为什么不呢?这是unix时间,因此您可以将其转换为可读的日期时间。此外,它还可以与时区配合使用。在SQL中计算SQL dat字段的速度更快,在PHP中有许多本机方法来操作SQL日期字段,默认情况下使用诸如SQL日期格式之类的库。SQL时间戳隐式地将数据存储在GMT时区中。无论您的会话时区是什么。如果你需要使用不同的时区,这很有用。我有同样的问题。我有模型课上的行为。它们似乎可以工作,但每次都将时间设置为epoch(“0000-00-00 00:00:00”),这是因为您的列在数据库中是DATETIME类型。将其更改为整数(11),它将工作;)我的设置为时间戳,但也设置为
0000-00-00 00:00:00
。设置为INT(11)
只需将其设置为0
。
use yii\behaviors\TimestampBehavior;
use yii\db\Expression;
public function behaviors()
{
return [
'timestamp' => [
'class' => 'yii\behaviors\TimestampBehavior',
'attributes' => [
ActiveRecord::EVENT_BEFORE_INSERT => ['created_at', 'updated_at'],
ActiveRecord::EVENT_BEFORE_UPDATE => ['updated_at'],
],
'value' => new Expression('NOW()'),
],
];
}
'value' => date('Y-m-d H:i:s')
use yii\behaviors\TimestampBehavior;
use yii\db\Expression;
public function behaviors()
{
return [
'timestamp' => [
'class' => 'yii\behaviors\TimestampBehavior',
'attributes' => [
ActiveRecord::EVENT_BEFORE_INSERT => ['created_at', 'updated_at'],
ActiveRecord::EVENT_BEFORE_UPDATE => ['updated_at'],
],
'value' => date('Y-m-d H:i:s'),
],
];
}