@valerik606
Web Developer

Как реализовать такой запрос на Yii2?

Здравствуйте! Есть вот такой, относительно, не хитрый запрос:

SELECT A.agency_id, A.agency_name, SUM( B.amount ) AS summ
FROM agency AS A
LEFT OUTER JOIN billing B ON B.date > '2006-05-01' AND B.date < '2006-07-20' AND B.agency_id = A.agency_id
GROUP BY A.agency_name


И таблицы:
Agency:
09d326007edd4edca0ee7e678f1f28c1.PNG
Billing:
ed957409b081459d9426636cb89db1b6.PNG

Нужно получить вот такое представление:
911dbda76edb424186bd74988c7c2b58.PNG
Т.е. для каждого агенства, вычислись сумму за указанный период.

На SQL скрипт есть, вот на Yii2 (yii\db\Query), пока пришел только к такому:
query = (new Query())
    ->select(['a.agency_name', 'b.amount'])
    ->from(['agency a'])
    ->leftJoin('billing b', "b.agency_id = a.agency_id AND b.date > '2006-05-01' AND b.date < '2007-07-20' ")
    ->groupBy('a.agency_name');

Есть добавить сюда ->sum('b.amount'), ругается,
"The "query" property must be an instance of a class that implements the QueryInterface e.g. yii\db\Query or its subclasses".
Прошу подсказать, как правильно реализовать данный запрос на Yii2 (yii\db\Query).
Заранее Спасибо!
  • Вопрос задан
  • 894 просмотра
Пригласить эксперта
Ответы на вопрос 2
@valerik606 Автор вопроса
Web Developer
Вообщем пока решил так:
$query = Yii::$app->db->createCommand("
                                SELECT A.agency_id, A.agency_name, SUM( B.amount ) AS summ
                                FROM agency AS A
                                LEFT OUTER JOIN billing B ON B.date > '2006-05-01'
                                    AND B.date < '2006-07-20'
                                    AND B.agency_id = A.agency_id
                                GROUP BY A.agency_name");
        $result= $query->queryAll();

Но возник другой вопрос:
Я передаю запрос провайдеру данных:
$dataProvider = new ActiveDataProvider([
            'query' => $query,
        ]);

И получаю ту же ошибку: "The "query" property must be an instance of a class that implements the QueryInterface e.g. yii\db\Query or its subclasses".
Ответ написан
@oleg_krechetov
Дла начала GROUP BY A.agency_name
заменить на
GROUP BY A.agency_id, A.agency_name
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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