آموزش نحوه اضافه کردن فیلد دارای ریلیشن با مدل دیگر در گریدویو

ساخت وبلاگ
برای اضافه کردن فیلد به گرید ویو به شکل زیر عمل کرده
  • ابتدا در سرچ مدل یک پروپرتی جدید ایجاد کرده و آن پروپرتی را در متد 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 : '');            },        ],

برنامه نویس...
ما را در سایت برنامه نویس دنبال می کنید

برچسب : نویسنده : خنجی prog بازدید : 251 تاريخ : پنجشنبه 7 ارديبهشت 1396 ساعت: 12:16

خبرنامه