Apabila kita menggunakan Gii untuk generate Crud, maka secara default di index.php terdapat kolom dengan masing-masing search field yang didasarkan pada kolom tertentu. Kali ini, kita akan membuat satu saja search field, namun bisa untuk melakukan pencarian pada kolom yang bersesuaian :
1. Uncomment
1 |
<?php echo $this->render('_search', ['model' => $searchModel]); ?> |
yang berada di index.php backend\views\companies.
2. Modifikasi _search.php yang berada di folder backend\views\companies dengan menambahkan field globalSearch.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<?php use yii\helpers\Html; use yii\widgets\ActiveForm; /* @var $this yii\web\View */ /* @var $model backend\modules\settings\models\CompaniesSearch */ /* @var $form yii\widgets\ActiveForm */ ?> <div class="companies-search"> <?php $form = ActiveForm::begin([ 'action' => ['index'], 'method' => 'get', ]); ?> <?= $form->field($model, 'globalSearch') ?> <div class="form-group"> <?= Html::submitButton('Search', ['class' => 'btn btn-primary']) ?> <?= Html::resetButton('Reset', ['class' => 'btn btn-default']) ?> </div> <?php ActiveForm::end(); ?> </div> |
3. Modifikasi model CompaniesSearch.php dan tambahkan property public $globalSearch.
1 2 3 4 5 6 7 8 9 10 11 |
public $globalSearch; /** * @inheritdoc */ public function rules() { return [ [['company_id'], 'integer'], [['company_name', 'globalSearch','company_email', 'company_address', 'company_start_date', 'company_created_date', 'company_status', 'logo'], 'safe'], ]; } |
Selanjutnya kita perlu juga mengedit pencarian, setiap string akan dibandingkan dengan globalSearch dan mengganti andFilterWhere menjadi orFilterWhere :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
public function search($params) { $query = Companies::find(); $dataProvider = new ActiveDataProvider([ 'query' => $query, ]); $this->load($params); if (!$this->validate()) { // uncomment the following line if you do not want to return any records when validation fails // $query->where('0=1'); return $dataProvider; } $query->orFilterWhere(['like', 'company_name', $this->globalSearch]) ->orFilterWhere(['like', 'company_email', $this->globalSearch]) ->orFilterWhere(['like', 'company_address', $this->globalSearch]) ->orFilterWhere(['like', 'company_status', $this->globalSearch]); return $dataProvider; } |
Sehingga CompaniesSearch.php menjadi :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
<?php namespace backend\models; use Yii; use yii\base\Model; use yii\data\ActiveDataProvider; use backend\models\Companies; /** * CompaniesSearch represents the model behind the search form about `backend\models\Companies`. */ class CompaniesSearch extends Companies { public $globalSearch; /** * @inheritdoc */ public function rules() { return [ [['company_id'], 'integer'], [['company_name', 'globalSearch','company_email', 'company_address', 'company_start_date', 'company_created_date', 'company_status', 'logo'], 'safe'], ]; } /** * @inheritdoc */ public function scenarios() { // bypass scenarios() implementation in the parent class return Model::scenarios(); } /** * Creates data provider instance with search query applied * * @param array $params * * @return ActiveDataProvider */ public function search($params) { $query = Companies::find(); $dataProvider = new ActiveDataProvider([ 'query' => $query, ]); $this->load($params); if (!$this->validate()) { // uncomment the following line if you do not want to return any records when validation fails // $query->where('0=1'); return $dataProvider; } $query->orFilterWhere(['like', 'company_name', $this->globalSearch]) ->orFilterWhere(['like', 'company_email', $this->globalSearch]) ->orFilterWhere(['like', 'company_address', $this->globalSearch]) ->orFilterWhere(['like', 'company_status', $this->globalSearch]); return $dataProvider; } } |
Buka list company sobat dan lakukan search :
Tutorial ini sebagai dokumentasi dan pembelajaran pribadi sekalian belajar terjemahin bahasa Inggris, dan siapa tahu bermanfaat buat orang lain. Sumber lengkapnya diambil dari Youtube DoingITEasy Channel.
tutorial kurang jelas.
Sip
Nice…terima kasih ilmunya, sangat bermanfaat…dan It’s Work.
Sama-sama, senang bisa membantu
bang kalo pencarian nya buka di index itu gimana bang sya punya pencarian nya bukan di index tapi di tampilan utama dashboard
Ada yang salah di baris 59 kode terakhir, seharusnya andWhere bukan orWhere semua
bertanya kembali.
Jika data yang akan diload banyak, saya kepingin dengan search form, namun grid secara default tidak menampilkan data satupun, kcuali stelah diisi pada kolom pencarian, dan klik cari.
Untuk mendefaultkan grid empty om load, bagaimana caranya? terima kasih.