Pembuatan timestamp atau waktu penginputan dan perubahan menjadi hal yang wajib bagi sebuah aplikasi. Biasanya kita menggunakan cara dengan mengassign waktu secara langsung sebelum save() atau menggunakan fungsi beforeSave. Tapi dengan Yii2 hal ini makin dipermudah dengan hadirnya timestamp behavior.

 

Pertanyaan pertama adalah apa yang dilakukan timestamp behavior. Timestamp behavior secara singkat sama seperti fungsi beforeSave, behavior ini akan menyimpan tanggal insert dan tanggal ubah sebelum melakukan insert atau update pada suatu tabel. Secara default timestamp behavior akan menyimpan 2 hal tersebut pada kolom created_at dan updated_at. Anda perlu menambahkan kode berikut pada model anda.

use yii\behaviors\TimestampBehavior;

............
class TStatus extends \yii\db\ActiveRecord { public function behaviors() { return [ TimestampBehavior::className(), ]; }
}

Wow, anda hanya perlu menambahkan 3 baris kode saja untuk mengimplementasikan timestamp behavior. Tentu saja kode tersebut akan berjalan ketika di model kita sudah ada kolom created_at dan updated_at. Lalu bagaimana jika aplikasi kita adalah aplikasi yang sudah berjalan dan memiliki nama kolom yang berbeda dengan kolom default Yii? Anda tidak perlu khawatir karena ini dapat dengan mudah dilakukan dengan kode berikut.

use yii\db\Expression;
...........
public function behaviors()
{
    return [
        [
            'class' => TimestampBehavior::className(),
            'createdAtAttribute' => 'create_time',
            'updatedAtAttribute' => 'update_time',
            'value' => new Expression('NOW()'),
        ],
    ];
}

Dimana create_time dan update_time merupakan kolom tempat kita menyimpan waktu pembuatan dan pengubahan. Cara lain dapat juga dengan menggunakan kode berikut.

use yii\db\ActiveRecord;
...........
public function behaviors()
         {
             return [
                 'timestamp' => [
                     'class' => 'yii\behaviors\TimestampBehavior',
                     'attributes' => [
                         ActiveRecord::EVENT_BEFORE_INSERT => ['create_time', 'update_time'],
                         ActiveRecord::EVENT_BEFORE_UPDATE => ['update_time'],
                     ],
                 ],
             ];
         }

Sama seperti kode sebelumnya dimana create_time dan update_time adalah kolom kita menyimpan waktu. Dengan begini maka tidak perlu lagi membuat baris tambahan di setiap action controller atau fungsi beforeSave tambahan di setiap model (use common models instead), cukup gunakan behavior maka semua sudah tersimpan.

Baiklah sekian tulisan ini, semoga membantu dan Happy Coding!