@tolalur

Как реализовать запрос к базе данных через ActiveDataProvider в yii2?

День добрый.
Есть модель, модель поиска.
Не придумал как реализовать запрос в терминах ActiveDataProvider, пришлось использовать SqlDataProvider
Прошу совета как реализовать запрос именно через ActiveDataProvider.
Пока метод search модели поиска выглядит так:
public function search($params)
    {
        $this->load($params);

        $sql = 'SELECT r_s.Line_ID, r_s.Device_Type, r_s.Defect_ID, 
                           COUNT(r_s.Defect_ID) as count_kol, 
                           CONCAT("(", def.Code, ") ", def.Name) AS def_code_name
                        FROM Rejected_Stats r_s
                        LEFT JOIN Defect AS def ON r_s.Defect_ID = def.ID
                        WHERE `Time` >= :date_start AND `Time` <= :date_end'
                        . (!empty($this->Line_ID) ? ' AND Line_ID = :Line_ID' : '')
                        . (!empty($this->Device_Type) ? ' AND Device_Type = :Device_Type' : '')
                        . ' GROUP BY Line_ID, Device_Type, Defect_ID';

        $params = [':date_start' => $this->date_start,
                   ':date_end'   => empty($this->date_end) ? '9999-99-99' : $this->date_end
        ];

        if(!empty($this->Line_ID))
        {
            $params[':Line_ID'] = $this->Line_ID;
        }

        if(!empty($this->Device_Type))
        {
            $params[':Device_Type'] = $this->Device_Type;
        }

        $dataProvider = new SqlDataProvider([
            'db' => Yii::$app->dbSensors,
            'sql' => $sql,
            'params' => $params,
            'sort' => [
                'attributes' => [
                    'Line_ID',
                    'Device_Type',
                    'count_kol',
                    'def_code_name' => [
                        'asc'     => ['def.Name' => SORT_ASC],
                        'desc'    => ['def.Name' => SORT_DESC],
                        'default' => SORT_ASC
                    ],
                ],
                'defaultOrder' =>['count_kol' => SORT_DESC]
            ],
        ]);

        $dataProvider->pagination = false;

        return $dataProvider;
  • Вопрос задан
  • 186 просмотров
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Как реализовать запрос к базе данных через ActiveDataProvider в yii2?

никак, ActiveDataProvider не занимается запросами в базу данных, для этого есть AR.

терминах ActiveDataProvider,

Видимо речь о методах AR?
www.yiiframework.com/doc-2.0/guide-db-query-builde...
www.yiiframework.com/doc-2.0/guide-db-active-recor...
По ссылкам есть примеры с groupBy и джоины и т.д. Вы формируете объект activeRecords и передаете его в ActiveDataProvider
Вы напишите с чем конкретно проблема, а если хотите, что бы кто-то за Вас код переделал - тогда это не сюда, а на фриланс. Вопрос в чем?
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы