Dalam membuat aplikasi, sering ada kondisi mengupdate suatu tabel maka tabel yang lain akan diupdate. Kita dapat membuat trigger melalui database dengan CREATE TRIGGER atau membuat simulasinya dalam aplikasi kita.

Kelebihan metode CREATE TRIGGER adalah integritas dan kecepatan update yang lebih baik.
Kekurangan metode CREATE TRIGGER adalah bahasa programming yang tidak terdokumentasi dengan baik dan juga terbatasnya sintax.

Kelebihan trigger dengan simulasi adalah kemudahan dan fleksibilitas melakukan coding. Kekurangan adalah kurang integritas dan kecepatannya lebih rendah dibanding CREATE TRIGGER.

Untuk saat ini kita akan membuat simulasi trigger di Yii.

Misal kita mempunyai tabel user

Dan tabel user_group

Kita ingin agar setiap perubahan di tabel user_group diinformasikan ke tabel user dan sesuai dengan user_id masing-masing.

Untuk itu kita membuat function di models/UserGroup.php untuk mengupdate tabel user
    public function updateLastUpdateMenu($user_id)
    {
        $user_id=(int) $user_id;
        $connection=Yii::app()->db;
        $last_update_menu=date(“Y-m-d H:i:s”,time());
        $sql_update=”UPDATE user
            SET last_update_menu=’$last_update_menu’
            WHERE user_id=$user_id”;
        $connection->createCommand($sql_update)->execute();
       
    }

Kemudian kita ingin agar setelah proses Create, Update , atau Delete di user_group terjadi akan menjalankan fungsi di atas.
Untuk itu tambahkan di models/UserGroup
    public function afterSave()
    {
        self::updateLastUpdateMenu($this->user_id);
        return parent::afterSave();
    }

    public function afterDelete()
    {
        self::updateLastUpdateMenu($this->user_id);
        return parent::afterDelete();
    }

Dengan demikian setelah proses Create, Update atau Delete, maka program akan memanggil fungsi updateLastUpdateMenu($user_id).

Untuk menyemprnakan trigger ini kita perlu memakai transaction seperti dijelaskan Transaction di Yii.

Kunjungi www.proweb.co.id untuk menambah wawasan anda.

Trigger di Yii