2014-12-09 10 views
5

Desidero aggiungere l'ora corrente del sistema nel database mentre inserisco il nuovo record nel database come nella colonna "time_created". La funzione time() di PHP non ha supporto in yii2. Voglio una funzione temporale specifica per yii2 che mi consenta di salvare il timestamp attuale. Qualcuno sa ????Come aggiungere data e ora correnti nel database. Qual è il formato?

+2

Non sono sicuro su altri db, ma se sei usando MySQL puoi avere una colonna di timestamp che si aggiorna da sola, http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html – Alex

+0

Benvenuto in StackOverflow! Per favore vedi ["Le domande dovrebbero includere" tag "nei loro titoli?"] (Http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles), dove il consenso è "no, non dovrebbero". –

risposta

9

Yii 2 ha un comportamento speciale per questo. Basta collegarlo al modello. Aggiungi questo al vostro modello per behaviors() metodo:

use yii\behaviors\TimestampBehavior; 
use yii\db\Expression; 

public function behaviors() 
{ 
    return [ 
     // Other behaviors 
     [ 
      'class' => TimestampBehavior::className(), 
      'createdAtAttribute' => 'time_created', 
      'updatedAtAttribute' => false, 
      'value' => new Expression('NOW()'), 
     ], 
    ]; 
} 
6

è anche possibile utilizzare Yii2 s' formatter come di seguito:

Yii::$app->formatter->asTimestamp(date('Y-d-m h:i:s')); //1410488596 
Yii::$app->formatter->asDatetime(date('Y-d-m h:i:s')); //Sep 12, 2014, 2:21:56 AM 
5

Forse questo è vecchio, ma può aiutare qualcun altro. Aggiungi il codice qui sotto nel tuo modello. Assicurati di modificare createdAttribute nel tuo attributo. È inoltre necessario includere:

use yii\behaviors\TimestampBehavior; 
use yii\db\Expression; 

public function behaviors() 
{ 
    return [ 
     [ 
      'class' => TimestampBehavior::className(), 
      'createdAtAttribute' => 'entry_date', 
      'updatedAtAttribute' => false, 
      'value' => new Expression('NOW()'), 
     ], 
    ]; 
} 
+0

Com'è diverso dalla mia risposta? – arogachev

+0

@arogachev Perché questa risposta è più leggibile e sembra completa della tua. –

3

È possibile utilizzare Yii \ db \ Expression per eseguire la funzione SQL

<?php 
use yii\db\Expression; 

$model->time_created = new Expression('NOW()'); 
$model->save(); 
0

semplicemente possibile utilizzare la funzione di PHP date() come - date('Y-m-d H:i:s');

0

Esistono diversi modi per aggiungere la data/ora, suggerisco di utilizzare il timestamp UNIX per motivi di gestione del fuso orario. Ad esempio, nelle istanze di Google SQL non è possibile impostare il fuso orario, ma offset, il che significa che è necessario aggiornare l'offset due volte all'anno a causa del periodo estivo/invernale. Per che, come qualcuno ha detto è anche possibile utilizzare i comportamenti:

public function behaviors() 
{ 
    return [ 
     [ 
      'class' => AttributeBehavior::className(), 
      'attributes' => [ 
       ActiveRecord::EVENT_BEFORE_INSERT => 'entry_date', 
      ], 
      'value' => function ($event) { 
       return time(); 
      }, 
     ], 

    ]; 
} 

o si può semplicemente aggiungere prima di inserire, come $model->entry_date=time(); ma come si farà questo su ogni INSERT quindi comportamenti sono la scelta migliore.

E, naturalmente, se si desidera leggere data formattata, è possibile utilizzare:

\Yii::$app->formatter->asDate($model->entry_date); 

Per asDate formattatore, potete leggere qui: http://www.yiiframework.com/doc-2.0/yii-i18n-formatter.html#asDate()-detail