Anda di halaman 1dari 2

Membuat Validasi Jika Ada Data yang Sama di YII Framework

05.06 Yii No comments


Membuat Validasi Jika Input Data yang Sama di YII Framework - untuk menghndari
terjadinya redudansi data, maka perlu dilakukan validasi untuk memunculkan pesan bahwa
data itu sudah di simpan sebelumnya dan tidak boleh sama, dalam kasus ini saya membuat
sebuah program yang didalamnya terdapat kode_faktur, nah kode_faktur disini merupakan
kode unik dimana data yang diinputkan tidak boleh sama dan berikut adalah contoh form
aplikasinya:
Ketika dimasukan kode faktur yang sama maka akan seperti ini:
Script Validasi agar muncul pesan kalau ada data yang sama:
<?php
/**
* CompositeUniqueKeyValidator class file.
*/
class CompositeUniqueKeyValidator extends CValidator {
/**
* @var string comma separated columns that are unique key
*/
public $keyColumns;
public $errorMessage = '"{columns_labels}" Tidak;
/**
* @var boolean whether the error message should be added to all of the columns
*/
public $addErrorToAllColumns = false;
/**
* @param CModel $object the object being validated
* @param string $attribute if there is an validation error then error message
* will be added to this property
*/
protected function validateAttribute($object, $attribute) {
$class = get_class($object);
Yii::import($class);
$keyColumns = explode(',', $this->keyColumns);
if (count($keyColumns) == 1) {
throw new CException('CUniqueValidator should be used instead');
}
$columnsLabels = $object->attributeLabels();
$criteria = new CDbCriteria();
$keyColumnsLabels = array();

foreach ($keyColumns as &$column) {


$column = trim($column);
$criteria->compare($column, $object->$column);
$keyColumnsLabels[] = $columnsLabels[$column];
}
unset($column);
$criteria->limit = 1;
if ($class::model()->count($criteria)) {
$message = Yii::t('yii', $this->errorMessage, array(
'{columns_labels}' => join(', ', $keyColumnsLabels)
));
if ($this->addErrorToAllColumns) {
foreach ($keyColumns as $column) {
$this->addError($object, $column, $message);
}
}
else {
$this->addError($object, $attribute, $message);
}
}
}
}
?>
Simpan script php di atas ke:
/protected/components/
Kemudian simpan dengan nama:
CompositeUniqueKeyValidator.php
Setelah itu tambahkan script dibawah ini kedalam model:
public function rules()
{
return array( array('Kode_Faktur', 'CompositeUniqueKeyValidator', 'keyColumns' =>
'Kode_Faktur, Kode_Barang'),
);
}
Keterangan:
Ganti Kode_Faktur dan Kode_Barang, sesuai dengan id primary key di aplikasi yii anda.

Anda mungkin juga menyukai