2014-11-02 83 views
2
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'], 
      ], 
     ], 
    ]; 
} 

上面的代碼用於我的控制器行爲功能。在創建或更新時,'create_time'和'update_time'字段沒有按當前時間更新。這些字段的類型設置爲日期時間。請你需要你的幫助。TimestampBehavior在Yii2中不工作

+0

編寫規則 – zelenin 2014-11-03 08:06:24

回答

2

你必須聲明它在模型中的行爲方式。

要使用TimestampBehavior,下面的代碼插入到你的ActiveRecord類

public function behaviors() 
{ 
    return [ 
    'class' => TimestampBehavior::className(), 
     'attributes' => [ 
      ActiveRecord::EVENT_BEFORE_INSERT => ['create_time', 'update_time'], 
      ActiveRecord::EVENT_BEFORE_UPDATE => ['update_time'], 
    ], 
    ]; 
} 
+0

我有同樣的問題。我在模型類中有行爲。他們似乎工作,但時間總是設置爲epoch(「0000-00-00 00:00:00」)每次 – iGbanam 2015-02-16 16:15:13

+1

這是因爲您的列在數據庫中是DATETIME類型。將它更改爲INTEGER(11),它將起作用;) – 2015-02-19 11:11:43

+1

Mine設置爲TIMESTAMP,但也設置爲「0000-00-00 00:00:00:00」。設置爲「INT(11)」將其設置爲「0」。 – 2015-06-27 11:05:51

2

試試這個,它爲我工作:

use yii\db\Expression; 
... 

     [ 
      'class' => TimestampBehavior::className(), 
      'updatedAtAttribute' => 'update_time', 
      'value' => new Expression('NOW()'), 
     ], 
+0

但我認爲這將只爲MySQL工作。任何其他RDBMS可能會標記錯誤。這是Yii2的開發者應該考慮的事情。 – iGbanam 2015-02-16 16:14:06

+1

一次又一次爲什麼人們使用int字段來存儲時間戳這樣一個壞主意。 – AndrewMcLagan 2015-04-19 07:11:45

+0

@AndrewMcLagan爲什麼不呢?它是unix的時間,所以你可以將它轉換爲可讀的日期時間。加上它適用於時區 – 2015-05-14 17:02:23

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()'), 
     ], 
    ]; 
} 
0

您還可以使用

'value' => date('Y-m-d H:i:s') 

如果您想使用PHP日期時間。

0

我用new Expression('NOW()')來存儲當前的時間戳。但它不存儲基於當前時區的日期。而是根據服務器時間進行存儲。

我只是使用正常的php日期函數來解決這個問題。

如:

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'), 
     ], 
    ]; 
}