Yii2 GridView показывает «(не установлено)», если dataProvider содержит GROUP BY и INNER JOIN - PullRequest
0 голосов
/ 20 января 2020

Я показываю (только показываю, не завершаю CRUD) результат запроса, который построен следующим образом:

SELECT SUM(a) AS ab, b, COUNT(*) as C
FROM x
INNER JOIN y
ON y.a = x.a
WHERE b=123
GROUP BY b

, поэтому я построил этот запрос с ActiveRecord в методе SearchModel s search() .
В модели таблицы a я добавил отношение hasOne().

Для отображения данных этого запроса я использую GridView. В этом массиве столбцов я использую y.b и т. Д. ...

Моя проблема: столбцы из таблицы x отображаются правильно, но для каждого «объединенного столбца» из таблицы y отображаются (не установлены).
Если я распечатаю построенный запрос ActiveRecord и выполняю его в своем клиенте sql, он отображает все данные.
Я полагаю, это зависит от функции Models primaryKey(), но я не могу ее изменить чтобы заставить стол работать должным образом. Кто-нибудь знает решение моей проблемы или почему dataProvider / GridView заботится о методе выбранной модели (в данном случае модели таблицы x) primaryKey() (или как заставить dataProvider / GridView игнорировать primaryKey()?

1 Ответ

0 голосов
/ 21 января 2020

В модели вы должны создать метод отношений с моделью отношений. Например:

class Patient extends ActiveRecord
{

    public function getOrders()
    {
        return $this->hasMany(Order::class, ['patient_id' => 'id']);
    }
}

class Order extends ActiveRecord
{
    public function getPatient()
    {
        return $this->hasOne(Patient::class, ['id' => 'patient_id']);
    }
}

Для доступа к данным:

// SELECT * FROM `patient` WHERE `id` = 1
$patient = Patient::findOne(1);
$orders = $patient->orders;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...