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




کاربران در حال بازدید این موضوع: 1 مهمان