kzpromo
@kzpromo
Yii2 Framework Developer

Yii2 gridview: как сделать вывод через rightjoin?

Добрый день, прошу подсказать, как сделать вывод данных в gridview через rightjoin?
Есть 2 таблицы/модели
  • Список курсов
  • Список проверенных курсов (типа чеклиста)


Задача: вывести список всех курсов, чтобы рядом стояла информация о проверке курса

public function search($params)
    {
        $query = BannerCourseQuestionsCheckList::find()->select(['`c`.*','`mdl_banner_course_questions_check_list`.*']);
        $query->rightJoin(BannerCourses::tableName().' c', 'c.course_id = mdl_banner_course_questions_check_list.course_id');

        // add conditions that should always apply here

        $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,
            'c.course_id' => $this->course_id,
            'added' => $this->added,
            'user_added' => $this->user_added,
            'add_time' => $this->add_time,
            'verified' => $this->verified,
            'user_verified' => $this->user_verified,
            'verify_time' => $this->verify_time,
        ]);
        //var_dump($query->prepare(Yii::$app->db->queryBuilder)->createCommand()->rawSql);
        return $dataProvider;
    }


<?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],

            [
                'attribute' => 'course_id',
                'value' => '`c`.`course_id`',
            ],
            'added',
            'user_added',
            'add_time',
            'verified',
            'user_verified',
            'verify_time',

            ['class' => 'yii\grid\ActionColumn'],
        ],
    ]); ?>


У меня выходит ошибка: Getting unknown property: common\models\BannerCourseQuestionsCheckList::`c`
Заранее благодарю
  • Вопрос задан
  • 473 просмотра
Пригласить эксперта
Ответы на вопрос 3
qonand
@qonand
Software Engineer
1. Для начала реализуйте связь между таблицами
2. Загружайте данные с помощью жадной загрузки
3. Атрибут для нужной колонки определяйте в формате <Название связи>.<Название атрибута связанной модели> например: 'BannerCourses.course_id'
Ответ написан
proudmore
@proudmore
Вам не нужен никакой rightjoin для этого.
Используйте жадную загрузку через методы with(),
а в колонках gridview можете прямо так и писать 'связанная сущность.поле связанной сущности'.
Работает только в том случае, если у вас объявлен геттер этой сущности.
Ответ написан
slo_nik
@slo_nik Куратор тега Yii
Доброе утро.
Всё правильно, у Вас нет свойства 'c'. Скажу больше, это псевдоним таблицы, который в gridView не нужен совершенно.
Для того, чтобы у Вас получилось вывести значение в gridView, Вам надо в модели объявить публичное свойство и потом использовать его в gridView.
Как-то так:
// в модели
public $c_id

$query->andFilterWhere([
  'c.course_id' => $this->c_id
])
//в gridview
[
   'attribute' => 'c_id',
],

И используйте joinWith()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы