تالار گفتمان nCIS.ir

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