Pada saat kita melakukan code generation dengan Gii pada Yii framework kita akan mendapatkan tampilan pada admin dengan tampilan search pada tiap kolomnya. Tetapi saat kita ingin menampilkan suatu kolom dari field tabel lain maka fungsi search dan sorting tidak muncul.

Pada tutorial kali ini kita akan membuat field yang berasal dari tabel lain tersebut mempunyai kolom search dan bisa melakukan sorting.

  1. Misal kita mempunyai tabel send_order dengan class SendOrder dan mempunyai relation seperti berikut ini:
        public function relations()
        {
            return array(
                ‘invoiceCustomer’ => array(self::BELONGS_TO, ‘InvoiceCustomer’, ‘invoice_customer_id’),
                ‘customer’ => array(self::BELONGS_TO, ‘TblCustomer’, ‘customer_id’),

            );
        }

  2. Kita ingin menampilkan field customer.customer_name dan invoiceCustomer.invoice_no lengkap dengan search pada kolom tersebut
  3. Buatlah public variable pada class tersebut
    class SendOrder extends CActiveRecord
    {
        public $customer_search;
        public $invoice_search;
  4. Masukkan variabel tersebut dalam safe on search:
        public function rules()
        {

         ……., customer_search,invoice_search’, ‘safe’, ‘on’=>’search’),

  5. Pada fungsi search() tambahkan relation, juga beserta field yang akan dipakai supaya efisien
            $criteria->with= array(‘customer’=>array(‘select’=>’customer_code,customer_name’),
            ‘invoiceCustomer’=>array(‘select’=>’invoice_no’),
            );
  6. Pada fungsi search() tambahkan criterianya
              $criteria->compare(‘customer.customer_name’,$this->customer_search,true);
              $criteria->compare(‘invoiceCustomer.invoice_no’,$this->invoice_search,true);
  7. Pada fungsi search() tambahkan customisasi sortingnya
            return new CActiveDataProvider($this, array(
                ‘criteria’=>$criteria,
                ‘sort’=>array(
                        ‘attributes’=>array(
                            ‘customer_search’=>array(
                                ‘asc’=>’customer.customer_name’,
                                ‘desc’=>’customer.customer_name DESC’,
                            ),
                            ‘invoice_search’=>array(
                                ‘asc’=>’invoiceCustomer.invoice_no’,
                                ‘desc’=>’invoiceCustomer.invoice_no DESC’,
                            ),
                            ‘*’,
                        ),
                    ),
            ));
  8. Pada views bagian admin.php , edit CGridView bagian column dengan pola seperti berikut ini:
             array(‘name’=>’customer_search’, ‘value’=>’$data->customer->customer_name’ ),
             array(‘name’=>’invoice_search’, ‘value’=>’$data->invoiceCustomer->invoice_no’ ),
  9. Hasilnya seperti gambar di bawah ini

  10. Informasi lebih lanjut silahkan membaca http://www.yiiframework.com/wiki/281/searching-and-sorting-by-related-model-in-cgridview/ .

Artikel sebelumnya http://www.proweb.co.id/articles/web_application/customize_sort_cgridview_yii.html .

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

ORM search pada CGridView Yii