Количество записей по id [Решено]

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Количество записей по id [Решено]

Сообщение svil »

Таблица Courses связана с таблицей Categories как Один ко многим по course_id
Нужно посчитать количество записей в Categories по course_id, то есть сколько категорий в курсе
и по каждому курсу вывести количество его категорий.
Контроллер

Код: Выделить всё

 public function actionIndex()
    {
      
        $searchModel = new CoursesSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

        $data_num = Categories::find()->count(); //количество
       
       return $this->render('index', [
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider,
            'data_num' => $data_num, //количество записей по  course_id?
        ]);
    }
Вид

Код: Выделить всё

  [
                'attribute' => 'categoriesName',
                'label' => '<i class="glyphicon glyphicon-list glyphicon-color" aria-hidden="true"></i>',
                'encodeLabel' => false,
                'value' =>  function ($dataProvider, $data_num) {
                        return Html::a($data_num, //Вот здесь это количество должно быть
                        ['/categories/index', 'course_id'=>$dataProvider->id]);
                    },
                'format' => 'html',
          ],
Последний раз редактировалось svil 2019.07.10, 13:22, всего редактировалось 1 раз.
masson
Сообщения: 545
Зарегистрирован: 2012.07.03, 15:59

Re: Количество записей по id

Сообщение masson »

Как бы вы написали запрос на чистом SQL? Он у вас есть?
Выкладывайте и тут вам подскажут как его к Yii подкрутить.
Аватара пользователя
leonenco
Сообщения: 155
Зарегистрирован: 2017.01.30, 22:42

Re: Количество записей по id

Сообщение leonenco »

я так понимаю вы получаете ошибку?
В вашем коде Gridview если вы хотите получить данные из внешнего var используйте closure:

Код: Выделить всё

'value' =>  function ($dataProvider) use ($data_num) { //<-----------
       return Html::a($data_num, //Вот здесь это количество должно быть
       ['/categories/index', 'course_id'=>$dataProvider->id]);
},
Во вторых, У вас есть модель которая возвращает One->hasMany

Код: Выделить всё

'value' =>  function ($model) {
       return Html::a(count($model->categories), //Вот здесь это количество должно быть,
       // и он должно быть если в вашей модели есть public fucntion getCategories(){ return $this->hasMany(.....)}
      ['/categories/index', 'course_id'=>$model->id]);
                    },
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: Количество записей по id

Сообщение svil »

Код: Выделить всё

 $this->view->params['number'] =  Categories::find()->where(['course_id'=> $id])->count();
Мне сам запрос понятен, мне не понятно как в Виде index Courses вывести количество категорий из таблицы Categories по каждому курсу
Leonenco, спасибо - стало доходить, пробую.
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: Количество записей по id

Сообщение svil »

Заработало, спасибо!
masson
Сообщения: 545
Зарегистрирован: 2012.07.03, 15:59

Re: Количество записей по id

Сообщение masson »

У меня логика немного другая чем у leonenco, поэтому я скажу что запрос вам непонятен :)
Он д.б.типа (псевдокод)

Код: Выделить всё

SELECT course.name as course, category.name as category, COUNT(... ) as cnt FROM ... JOIN ... GROUP BY ... WHERE ...
А дальше выводить результат в обычном GridView, или циклом в массиве, как вам удобнее
Ответить