2014-12-09 16 views
5

Chcę dodać bieżący czas systemowy do bazy danych podczas wstawiania nowego rekordu do bazy danych, jak w kolumnie "time_created". Funkcja time() PHP nie ma wsparcia w Yii2. Chcę yii2 określonej funkcji czasu, która pomoże mi zapisać bieżący znacznik czasu. Ktokolwiek wie????Jak dodać bieżący datownik w bazie danych. Jaki jest format?

+2

Nie wiem o innych DB, ale jeśli jesteś używając MySQL możesz mieć aktualizację kolumny czasowej, http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html – Alex

+0

Witamy w StackOverflow! Zobacz ["Czy pytania powinny zawierać" znaczniki "w tytułach?] (Http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles), gdzie konsensus jest "nie, nie powinny". –

Odpowiedz

9

Yii 2 ma specjalne zachowanie. Wystarczy dołączyć go do modelu. Dodaj do tego modelu do behaviors() metody:

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

Można również użyć Yii2 „s formatter jak poniżej:

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

Może to jest stary, ale może to pomoże kogoś innego. Dodaj poniższy kod w swoim modelu. Upewnij się, że zmieniłeś createdAttribute na swój atrybut. Trzeba również zawierać:

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

Jak to się różni od mojej odpowiedzi? – arogachev

+0

@arogachev Ponieważ ta odpowiedź jest bardziej czytelna i wygląda kompletnie niż twoja. –

3

Można użyć Yii \ db \ Expression do wykonywania funkcji SQL

<?php 
use yii\db\Expression; 

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

można po prostu użyć date() funkcji PHP jako - date('Y-m-d H:i:s');

0

Istnieje kilka sposobów dodawania znacznika czasu. Sugeruję użycie znacznika czasu UNIX, aby poradzić sobie ze strefą czasową. Na przykład w instancjach Google SQL nie można ustawić strefy czasowej, ale przesunięcie, co oznacza, że ​​trzeba zaktualizować przesunięcie dwa razy w roku ze względu na czas letni/zimowy. Za to jak ktoś wspomniał można również użyć zachowań:

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

    ]; 
} 

lub można po prostu wystarczy dodać przed insertu, jak $model->entry_date=time(); ale jak można to zrobić na każdym INSERT następnie zachowania są lepszym wyborem.

I oczywiście, jeśli chcesz przeczytać sformatowaną datę, można użyć:

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

Dla asDate formater, można przeczytać tutaj: http://www.yiiframework.com/doc-2.0/yii-i18n-formatter.html#asDate()-detail

Powiązane problemy