Php Yii时间戳是如何工作的?
Yii说它可以自动设置时间戳“created_at”: 但是,每次我创建记录时,时间都是空白的:Php Yii时间戳是如何工作的?,php,yii,yii2,Php,Yii,Yii2,Yii说它可以自动设置时间戳“created_at”: 但是,每次我创建记录时,时间都是空白的: $ yii kw/test 1437683634 mysql> select * from ad_group_keyword_network where ad_group_keyword_id = 1; +---------------------+- | created_at | +---------------------+- | 0000-00-00 00:00:0
$ yii kw/test
1437683634
mysql> select * from ad_group_keyword_network where ad_group_keyword_id = 1;
+---------------------+-
| created_at |
+---------------------+-
| 0000-00-00 00:00:00 |
| 0000-00-00 00:00:00 |
+---------------------+-
public function actionTest() {
$agkn = new AdGroupKeywordNetwork();
$agkn->save();
echo $agkn->created_at;
我尝试了Schema::TYPE_TIMESTAMP
,我更改了字段,还尝试了Schema::TYPE_DATETIME
。它们都在保存后在字段中返回一个整数时间戳,但在数据库中时间都是0
public function behaviors()
{
return [
[
'class' => TimestampBehavior::className(),
'attributes' => [
ActiveRecord::EVENT_BEFORE_INSERT => ['created_at'],
ActiveRecord::EVENT_BEFORE_UPDATE => [],
对于Yii 2时间戳行为工作,您在处创建的
必须是INT(11)类型。我认为您使用的是类型时间戳,但它不起作用。根据Marc和Michael所说的,我使用了这个,它起作用了
public function behaviors()
{
return [
[
'class' => TimestampBehavior::className(),
'createdAtAttribute' => 'created_at',
'updatedAtAttribute' => null,
'value' => function(){return date(DATE_ATOM);},
$value是用于生成时间戳的表达式,默认情况下,它将使用time()
的值,除非为其指定一个返回时间戳值的匿名函数:
'timestamp' => [
'class' => TimestampBehavior::className(),
'attributes' => [
ActiveRecord::EVENT_BEFORE_INSERT => 'created_at',
ActiveRecord::EVENT_BEFORE_UPDATE => 'updated_at',
],
'value' => function() { return date('U'); },
],
或表示db表达式的yii\db\Expression对象:
'timestamp' => [
'class' => TimestampBehavior::className(),
'attributes' => [
ActiveRecord::EVENT_BEFORE_INSERT => 'created_at',
ActiveRecord::EVENT_BEFORE_UPDATE => 'updated_at',
],
'value' => new \yii\db\Expression('NOW()'), // MySql exp
],
yii-timstamps是unix时间戳,您试图将这些整数填充到mysql日期字段中,该字段要求字符串的格式为yyy-mm-dd hh:mm:ss
。因为您的整数不是该格式,所以您得到的是全零日期,即“未知/无效”日期。@MarcB确定。我希望Yii能够根据字段的类型进行转换。它从未提到所需的类型。我想它还得赶上Rails。
'timestamp' => [
'class' => TimestampBehavior::className(),
'attributes' => [
ActiveRecord::EVENT_BEFORE_INSERT => 'created_at',
ActiveRecord::EVENT_BEFORE_UPDATE => 'updated_at',
],
'value' => new \yii\db\Expression('NOW()'), // MySql exp
],