Model Event merupakan metode yang dipanggil pada saat tertentu dari siklus object untuk memicu logika sebelum atau setelah perubahan pada object tersebut. Dengan model event memungkinkan kita untuk menulis kode yang akan dijalankan setiap kali sebuah objek Active Record dibuat, disimpan, diperbarui, dihapus, divalidasi, atau diambil dari database.
Method
Berikut adalah daftar callback yang tersedia dalam Active Record.
Method | Description |
---|---|
afterConstruct() | Metode ini dipanggil ketika instance baru dibuat |
afterDelete() | Metode ini dipanggil ketika record dihapus |
afterFind() | Metode ini dipanggil setelah record dipanggil dengan metode find. |
afterSave() | Metode ini dipanggil setelah menyimpan record. |
afterValidate() | Metode ini dipanggil setelah record divalidasi |
beforeDelete() | Metode ini dipanggil sebelum record dihapus |
beforeFind() | Metode ini dipanggil sebelum record dipanggil dengan metode find. |
beforeSave() | Metode ini dipanggil sebelum menyimpan record. |
beforeValidate() | Metode ini dipanggil sebelum record divalidasi |
Contoh
Misalnya, untuk satu kasus mungkin kita ingin melakukan sesuatu sebelum data disimpan. Untuk melakukannya kita hanya perlu membuat method beforeSave() dalam model:
# protected/models/YourModel.php
protected function beforeSave() {
// perintah yang akan di eksekusi
return parent::beforeSave();
}
Pada kasus nyata penggunaan model event ini salah satunya adalah ketika kita membuat sebuah artikel, kolom user_id harus di set dengan nilai user id yang sedang login. Salah satu cara untuk kasus ini adalah dengan membuat method beforeValidate().
# protected/models/YourModel.php
protected function beforeValidate() {
if(empty($this->user_id)) {
$this->user_id = Yii::app()->user->id;
}
return parent::beforeValidate();
}
Contoh lain, pada artikel ini di contohkan cara untuk mengatur dua tanggal / waktu nilai kolom melalui skenario:
# protected/models/YourModel.php
public function rules() {
....
array('created_at', 'default', 'value'=>new CDbExpression('NOW()'), 'on'=>'insert'),
array('updated_at', 'default', 'value'=>new CDbExpression('NOW()'), 'on'=>'update'),
}
Solusi lain untuk masalah di atas kita bisa menggunakan method beforeSave()
dan set nilai created_at
dan updated_at
didalam method tersebut. Untuk memastikan apakah data yang di submit merupakan record baru atau data yang diupdate, kita bisa menggunakan fungsi isNewRecord.
# protected/models/YourModel.php
public function beforeSave() {
if ($this->isNewRecord) {
$this->created_at = new CDbExpression('NOW()');
}
else {
$this->updated_at = new CDbExpression('NOW()');
}
return parent::beforeSave();
}
No Comments
Leave a comment Cancel