• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
مرتب کردن بر اساس تعداد relation
#1
سلام
من دوتا جدول دارم، فرض کنید آزمون و سوال
حالا می خوام توی gridview مربوط به آزمون یه ستون اضافه کنم به عنوان تعداد سوال و بتونم gridview رو بر اساس این تعداد سوال مرتب کنم

ممنون می شم راهنمایی کنید مخصوصا قسمت مرتب کردن رو
  پاسخ
تشکر شده توسط :
#2
.سلام
یه مثال ساده (فقط دقت کن که داده ارسالی به گریدویو به جای شی ، آرایه خواهد بود!) :
کد پی‌اچ‌پی:
$dataProvider = new ActiveDataProvider ( [ 
                
'query' => Azmoon::find ()->select(['azmoon.*','(select count(question.id) from question where question.azmoon_id = azmoon.id) as cq'])->asArray(),
                
'sort' => [ 
                        
'attributes' => [ 
                                
/*other columns for sorting*/,
                                
'cq' 
                                

                    ]
            ] ); 
داخل گریدویو هم کافیه یه ستون به نام cq اضافه کنی.
  پاسخ
تشکر شده توسط :
#3
مرسی
حل شد. فقط من دوباره به شکل object فرستادم و البته درست کار کرد
به جز تاثیر روی سرعتش، تاثیر منفی دیگه ای هم داره؟
  پاسخ
تشکر شده توسط :
#4
منظور من سرعت نبود. چون شما داخل مدل خودتون cq رو به عنوان attribute ندارین طبیعتا باید خطا می داد!
  پاسخ
تشکر شده توسط :
#5
نه ارور نمی ده، باید ارتباطش بدی به یه attribute که خودت تغریف می کنی و توی gridview و rule ها هم می ذاریش:
البته من cq رو عوض کردن با questionCount
کد پی‌اچ‌پی:
public $boughtCount;

...

 public function 
rules()
    {
        return [
            [[... 
'questionCount',...], 'integer'],
        ];
    }

...
$query Exam::find()->select([
                
'exam.*',
                
'(select count(question.id) from question where question.exam_id = exam.id) as questionCount',
            ])
...
...
....

 
$dataProvider->sort->attributes['createdAtText'] = [
            
'asc' => ['created_at' => SORT_ASC],
            
'desc' => ['created_at' => SORT_DESC],
        ]; 
  پاسخ
تشکر شده توسط : mohammadhosain


پرش به انجمن:


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