Не работает limit в search model

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
webgrig
Сообщения: 163
Зарегистрирован: 2015.10.29, 21:34

Не работает limit в search model

Сообщение webgrig »

Имею serch model в которую прописываю limit,

Код: Выделить всё

if ($limit) $query->limit($limit);
но он почему-то не срабатывает!

Поле загрузки страницы смотрю все запросы к БД через дебагер и вижу, что в запросе лимит выставляется по умолчанию 20, а мой лимит не срабатывает.

Помогите пожалуйста разобраться, что я делаю не так.

В контроллере я обращаюсь к serch model вот так:

Код: Выделить всё

$newsSearchModel = new NewsSearch();
$newsDataProvider = $newsSearchModel->search([], 3);
Вот код самой search model;

Код: Выделить всё

<?php

namespace app\models;

use yii\base\Model;
use yii\data\ActiveDataProvider;

/**
 * NewsSearch represents the model behind the search form about `app\models\News`.
 */
class NewsSearch extends News
{
    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['id', 'user_id', 'published'], 'integer'],
            [['title_ru', 'title_ro', 'title_en', 'text_ru', 'text_ro', 'text_en', 'description_ro', 'description_ru', 'description_en', 'created_at', 'updated_at', 'news_date'], 'safe'],
        ];
    }

    /**
     * @inheritdoc
     */
    public function scenarios()
    {
        // bypass scenarios() implementation in the parent class
        return Model::scenarios();
    }

    /**
     * Creates data provider instance with search query applied
     *
     * @param array $params
     *
     * @return ActiveDataProvider
     */
    public function search($params, $limit = false)
    {
        $query = News::find();
        if ($limit) $query->limit($limit);

        if (\Yii::$app->controller->module->id != 'backend') {
            $query->where(['published' => 1]);
        }

        // add conditions that should always apply here

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

        $this->load($params);

        if (!$this->validate()) {
            return $dataProvider;
        }

        // grid filtering conditions
        $query->andFilterWhere([
            'id' => $this->id,
            'user_id' => $this->user_id,
            'published' => $this->published,
        ]);

        $query->andFilterWhere(['like', 'title_ru', $this->title_ru])
            ->andFilterWhere(['like', 'title_ro', $this->title_ro])
            ->andFilterWhere(['like', 'title_en', $this->title_en])
            ->andFilterWhere(['like', 'text_ru', $this->text_ru])
            ->andFilterWhere(['like', 'text_ro', $this->text_ro])
            ->andFilterWhere(['like', 'text_en', $this->text_en])
            ->andFilterWhere(['like', 'description_ro', $this->description_ro])
            ->andFilterWhere(['like', 'description_ru', $this->description_ru])
            ->andFilterWhere(['like', 'description_en', $this->description_en]);

        return $dataProvider;
    }
}

Nerf
Сообщения: 780
Зарегистрирован: 2015.01.29, 00:37

Re: Не работает limit в search model

Сообщение Nerf »

Limit выставляет Pagination в ActiveDataProvider.
webgrig
Сообщения: 163
Зарегистрирован: 2015.10.29, 21:34

Re: Не работает limit в search model

Сообщение webgrig »

Nerf писал(а): 2017.03.27, 18:38 Limit выставляет Pagination в ActiveDataProvider.
Спасибо!
Ответить