Как в Yii2 в dataProvider дописать условие по которому джоинить?

Есть полностью рабочий запрос на sql:
SELECT u.id, u.firstname, u.lastname, bsr.requests, bsr.found_sum
FROM user u
LEFT JOIN billing_stat_request bsr ON (bsr.id = u.id AND bsr.date = '2016-06-03')
WHERE u.company_id = 1

На его основе необходимо создать activeDataProvider.
В моделе User создала метод:
public function getBillingStatRequest()
    {
        return $this->hasOne(BillingStatRequest::className(), ['id' => 'id']);
    }

dataProvider создаю так:
$model = User::find()
                ->select('user.id, lastname, firstname, middlename')
                ->where(['company_id' => $company_id])
                ->joinWith('billingStatRequest bsr', true, 'LEFT JOIN');

        $dataProvider = new ActiveDataProvider([
            'query' => $model
        ]);

В таком случае не учитывается, что джоинить надо еще и по bsr.date = '2016-06-03'.
Пробовала сделать так:
$model = User::find()
                ->select('user.id, lastname, firstname, middlename')
                ->where(['company_id' => '1'])
                ->join('LEFT JOIN', 'billing_stat_request bsr', "bsr.id = user.id AND bsr.date = 2016-06-03" );

        $dataProvider = new ActiveDataProvider([
            'query' => $model
        ]);

Тоже не работает как надо.
Как это реализовать?
Может не через activeDataProvider?
В итоге результаты выборки мне надо отобразить в GridView::widget.
  • Вопрос задан
  • 955 просмотров
Решения вопроса 1
bagiroff777
@bagiroff777
Веб-разработчик
public function getBillingStatRequest()
{
return $this->hasOne(BillingStatRequest::className(), ['id' => 'id'])->andOnCondition(['bsr.date' => '2016-06-03']);
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@bearenok
вот так у меня работает:
->leftJoin(['bsr'=>'billing_stat_request'], "bsr.id = user.id AND bsr.date = '2016-06-03'");
Ответ написан
Ваш ответ на вопрос

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

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