Php Yii时间戳是如何工作的?

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说它可以自动设置时间戳“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: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
],