05-02-1396، 11:16 ب.ظ
برای اضافه کردن فیلد به گرید ویو به شکل زیر عمل کرده
- ابتدا در سرچ مدل یک پروپرتی جدید ایجاد کرده و آن پروپرتی را در متد rule کلاس سرچ مدلمان اضافه می کنیم. به طور مثال در کد زیر فیلد mobile در مدل customer قرار دارد و گریدویو ما از مدل دیگری است به طور مثال مدل order
class OrderSearch extends Order { public $mobile; /** * @inheritdoc */ public function rules() { return [ [['mobile'], 'safe'], ]; } }
- سپس در متد search از کلاس OrderSearch به صورت زیر عمل می کنیم. و توسط متد joinwith با مدل customer توسط نام ریلیشن که دراینجا customer است ارتباط برقرار می کنیم
public function search($params) { $query = Order::find(); // add conditions that should always apply here $query->joinWith('customer'); $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; } // grid filtering conditions $query->andFilterWhere([ 'id' => $this->id, ]); $query->andFilterWhere(['like', 'customer.mobile', $this->mobile]); return $dataProvider; }
- حالا در نهایت در گریدویو مربوطه می توان به شکل زیر عمل کرد:
[ 'attribute' => 'mobile', 'label' => 'Customer Mobile', 'format' => 'raw', 'value' => function ($dataProvider) { return (isset($dataProvider->customer->mobile) ? $dataProvider->customer->mobile : ''); }, ],