Kasus ini sangat lumrah ditemukan pada pemograman di bidang manapun. Misalnya kita memiliki sebuah database. Ketika meng-insert sebuah record, maka field create_date dan create_by akan terisi otomatis. Atau misalnya ketika kita insert sebuah table Mahasiswa, dimana kalau kita isi field_x nilainya “10″, maka field_z milik table Mahasiswa berisi “10″ juga.
Di dalam Yii Framework, kita bisa melakukannya dengan beberapa cara. Cara paling gampang adalah menggunakan fitur CDefaultValidator. Kita ambil contoh kasus yang paling umum dijumpai. Misalnya, kita memiliki sebuah tabel database bernama Invoice yang akan berisi daftar-daftar tagihan. Table Invoice, selain memiliki field yang berisi data tagihan, juga memiliki empat field berupa:
- create_date : berisi tanggal dan waktu ketika record bersangkutan di-insert.
- create_by : berisi nilai ID user yang melakukan proses insert.
- modify_date : berisi tanggal dan waktu ketika record bersangkutan di-update.
- modify_by : berisi nilai ID user yang melakukan update pada record.
Supaya Yii bisa otomatis mengisi maka kita cukup menulis kode berikut di dalam file webroot/models/Invoice.php
public function rules(){ .... array('create_date', 'default', 'value'=>date('Y-m-d H:i:s'), 'on'=>'insert'), array('create_by', 'default', 'value'=>Yii::app()->user->id, 'on'=>'insert'), array('update_date', 'default', 'value'=>date('Y-m-d H:i:s'), 'on'=>'update', 'setOnEmpty'=>false), array('update_by', 'default', 'value'=>Yii::app()->user->id,'on'=>'update', 'setOnEmpty'=>false), .... }
Perhatikanlah keempat rule yang tertera di atas. Pada rule yang pertama, itu maksudnya pada saat skenario “insert”, Yii akan otomatis memasukkan tanggal dan waktu sekarang ke dalam field create_date. Kita menggunakan koding date(‘Y-m-d H:i:s’) untuk mengambil waktu saat kini.
Dan pada rule kedua, kita ingin mengisi field create_by dengan nilai ID user. Untuk mendapatkan nilai ID user, kita menggunakan sintaks Yii::app()->user->id (Anda bisa mempelajari UserIdentity untuk mengetahui perihal ID User ini).
Pada rule ketiga, kita ingin Yii mengisi field modify_date secara otomatis. Oleh karena itu kita menggunakan parameter ‘on’=>’update’ yang artinya hanya diisi pada saat skenario “update”. Selain itu, kita juga sengaja menambah parameter ‘setOnEmpty’=>false. Ini tujuannya untuk meminta Yii tetap mengisi field modify_date, walaupun modify_date saat ini sudah ada nilai (Normalnya, Yii tidak akan isi lagi, kalau field-nya sudah ada nilai).
Rule keempat seharusnya sudah sangat jelas. Jadi kita meminta Yii untuk mengisi ID dari user ke dalam field modify_id, pada saat skenario “update” dan meminta Yii untuk tetap mengisi field, jika ternyata field sudah terisi sebelumnya.
saya ngikutin kodingan yang diatas,tp yang tersimpan jamnya tidak sesuai.
solusinya gmn bang admin ?
Kalau waktu-nya gak benar, maka ini dikarenakan jam server-nya. Biasanya kalau hostingnya di Amerika, maka jam-nya bakal pakai jam USA sana. Solusinya adalah jangan pakai fungsi date() lagi. Tapi pakai fungsi strftime(), dipadukan set_locale().
Bentuk codingnya kurang lebih:
public function rules(){
set_locale(LC_TIME, ‘Indonesia’);
….
array(‘create_date’, ‘default’, ‘value’=>strftime(‘%Y-%m-%d %H:%M:%S’), ‘on’=>’insert’),
….
}
oke bang admin terima kasih atas responnya
mau nannya dong gan:
$tgl = date(“Y-m-d”);
$model9 = Absen::model() -> updateAll (array(‘id’=>Yii::app()->user->name, ‘tgl’=>$tgl)); // findAllByAttributes(array(‘id’=>Yii::app()->user->name, ‘tgl’=>$tgl));
if (isset ($_POST['keluar']))
{
$model9 -> selisih= 3;
$model9 -> save();
}
hasilnya “Attempt to assign property of non-object ”
kira2 gimana ya solusinya?
Itu karena agan pakai updateAll()
$model9 = Absen::model() -> updateAll (array(‘id’=>Yii::app()->user->name, ‘tgl’=>$tgl));
Harusnya pakai findAllByAttributes()
$model9 = Absen::model() -> findAllByAttributes (array(‘id’=>Yii::app()->user->name, ‘tgl’=>$tgl));
gan,scriptnya cuma ditaroh models/Invoice.php ja yah?
ane koq ga bisa muncul kayak gini
Property “CWebUser.id_user” is not defined.
sorry, baru itungan hari blajar yii. ^_^
gan,scriptnya cuma ditaroh models/Invoice.php ja yah?
ane koq ga bisa muncul kayak gini
Property “CWebUser.id_user” is not defined.
sorry, baru itungan hari blajar yii. ^_^
Mau tanya dunk ,mohon pencerahannya, saya memiliki,
Tabel_Barang dngn field:
id_barang
kd_barang
nm_barang
nm_barang1
keterangan
bagaimana biar saat input di field nm_barang, nm_barang1 otomatis keisi nama yang sama.
mau tanya, saya punya form barang masuk, barang keluar dan stok barang.
gimana ya mas caranya biar saat saya input di form barang masuk beberapa datanya(nama, jumlah stok, suplier, jenis) secara otomatis masuk di form stok barang. Dan saat saya isi form barang keluar jumlah stok yg ada di form barang keluar otomatis berkurang.