December 18, 2016

Before Save dan After Save di Yii2

Assalamualaikum wr wb, pada kesempatan kali ini saya akan berbagi ilmu mengenai penjelasan dan cara menggunakan before save dan after save di Yii2. Setelah lama tidak update blog karena berbagai kesibukan, kita mulai lagi belajar dari hal hal yang ringan tapi cukup bermanfaat. Kita akan membuat sebuah fungsi di Yii2 yang cara menggunakan nya mirip seperti trigger di Sql, fungsi ini sangat berguna karena berjalan secara paralel pada waktu melakukan proses save atau update data pada model active record. Untuk lebih jelasnya langsung saja kita coba praktekkan cara membuat Before Save dan After Save di Yii2.

Before Save dan After Save di Yii2

Disini saya akan menggunakan tabel dengan struktur seperti di bawah ini.

mysql> desc tb_propinsi;
+--------------+-------------+------+-----+---------+----------------+
| Field        | Type        | Null | Key | Default | Extra          |
+--------------+-------------+------+-----+---------+----------------+
| propinsi_id  | int(11)     | NO   | PRI | NULL    | auto_increment |
| nama         | varchar(45) | NO   |     | NULL    |                |
| dalam_negeri | tinyint(4)  | YES  |     | NULL    |                |
| created_at   | datetime    | NO   |     | NULL    |                |
| updated_at   | datetime    | NO   |     | NULL    |                |
+--------------+-------------+------+-----+---------+----------------+
5 rows in set (0,00 sec)

Kasus Pertama

Kita buat sebuah CRUD menggunakan GII untuk tabel propinsi tersebut, tapi tanpa ada input untuk created_at dan updated_at dan coba kita lakukan proses insert data.

Before Save dan After Save di Yii2

Before Save dan After Save di Yii2

Maka akan terjadi error seperti berikut karena field created_at dan updated_at saya buat not null dan tidak ada default value pada form inputan.

Before Save dan After Save di Yii2

Before Save dan After Save di Yii2

Solusi

Nah, untuk menyelesaikan masalah di atas kita bisa menggunakan fungsi before save.

Before save adalah proses yang di lakukan sebelum proses save ke model active record terjadi.

Kita buat script seperti pada dokumentasi nya disini, dan ubah scrip pada model TbPropinsi dengan menambahkan script di bawah ini.

public function beforeSave($insert) {
        if (parent::beforeSave($insert)) {
            $this->created_at = date('Y-m-d H:i:s');
            $this->updated_at = date('Y-m-d H:i:s');
            return true;
        } else {
            return false;
        }
    }

Kemudian coba kita eksekusi lagi proses Insert Data Propinsi. Foilah sukses berjalan tanpa error pada field created at, updated at dan data sudah terisi sesuai before save yang kita definisikan.

Before Save dan After Save di Yii2

Before Save dan After Save di Yii2

Kasus Kedua

Pada kasus kedua ini saya akan mencoba menginsert data secara paralel pada tabel yang lain ketika proses menyimpan data pada tabel propinsi terjadi. Tabel yang saya gunakan adalah tabel kabupaten. Pada form Insert Tabel Propinsi, akan terjadi proses insert ke tabel propinsi dan tabel kabupaten.

mysql> desc tb_kabupaten_kota;
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| kab_id      | int(11)      | NO   | PRI | NULL    | auto_increment |
| nama        | varchar(150) | NO   |     | NULL    |                |
| propinsi_id | int(11)      | NO   | MUL | NULL    |                |
| kab_kodya   | int(11)      | YES  |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+

Seperti yang terlihat, ada sebuat field foreign key propinsi id pada tabel tb_kabupaten_kota tersebut, jika ingin melakukan proses paralel insert pada tabel kabupaten, tidak bisa menggunakan berfore save seperti pada kasus pertama. Karena row pada tabel propinsi belum terbentuk dan data untuk foreign key propinsi_id tidak ada. Untuk itulah maka pada kasus ini kita menggunakan fungsi after save.

After save adalah proses yang dilakukan setelah proses save di model Active Record Terjadi.

Langsung saja kita tambahkan script di model TbPropinsi untuk menginsert data secara paralel pada tabel TbKabupatenKota.

public function afterSave($isNew, $old) {
       if ($isNew){  
           $kabupaten = new TbKabupatenKota;
           $kabupaten->propinsi_id = $this->propinsi_id;
           $kabupaten->nama = "kabupaten dari propinsi ".$this->nama;
           $kabupaten->kab_kodya = 1;
           $kabupaten->save();        
       }
   }

*fungsi di atas berjalan jika proses insert data baru pada model tbPropinsi di eksekusi.

Uji Coba

Kita coba masukkan data pada Form Create Propinsi.

Before Save dan After Save di Yii2

Before Save dan After Save di Yii2

Kemudian kita lihat data pada tabel kabupaten kota apakah data sudah bisa di insert beserta foreign key dari Tabel Propinsi. Tadaa, data berhasil di insert sesuai dengan fungsi after save yang kita buat tadi 😀 .

Before Save dan After Save di Yii2

Before Save dan After Save di Yii2

Sekian bahasan yang saya sampaikan, semoga dapat bermanfaat. Kritik dan masukkan silahkan sampaikan saja, jangan sungkan sungkan 😀 .

Terimakasih.

referensi dari Yii2 framework

Agus Wiji Suhariono

Memulai menulis Blog pada bulan November dari Tahun 2015. Penulis merupakan alumni dari Politeknik Negeri Malang angkatan 2011 Program Studi Manajemen Informatika, Jurusan Elektro. Penulis memulai menekuni dunia programming mulai tahun 2014 dan sekarang bekerja di Pemerintahan sebagai IT Staff.

You may also like...

Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detected!!!

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

Powered By
100% Free SEO Tools - Tool Kits PRO