2015-11-17 27 views
8

Merhaba çocuklar çalışmıyor, ama komutu görürseniz o ki limit göstermektedir daha ama ActiveDataProvider için sorguyu geçerken tüm kayıtları getirmesiSINIR ActiveDataProvider i Aşağıdaki kodu ve <code>limit</code> doesnt iş kullanıyorum

$data= User::find()->where(['category_id'=> 5])->orderBy(['rand()' => SORT_DESC])->limit(4); 

    $command = $data->createCommand(); 

    $data2 = $command->queryAll();// This works fine and fetch only 4 data 

    $dataProvider = new ActiveDataProvider([ 
     'query' => $data, 

    ]); // But this displays all data without limit 

Sorunum burada yapıyorum ???

/** 
* @inheritdoc 
*/ 
protected function prepareModels() 
{ 
    if (!$this->query instanceof QueryInterface) { 
     throw new InvalidConfigException('The "query" property must be an instance of a class that implements the QueryInterface e.g. yii\db\Query or its subclasses.'); 
    } 
    $query = clone $this->query; 
    if (($pagination = $this->getPagination()) !== false) { 
     $pagination->totalCount = $this->getTotalCount(); 
     $query->limit($pagination->getLimit())->offset($pagination->getOffset()); 
    } 
    if (($sort = $this->getSort()) !== false) { 
     $query->addOrderBy($sort->getOrders()); 
    } 

    return $query->all($this->db); 
} 

Biz bu bölümünde ilgilendiğiniz: sayfalama false değilse Gördüğünüz gibi Yani

if (($pagination = $this->getPagination()) !== false) { 
    $pagination->totalCount = $this->getTotalCount(); 
    $query->limit($pagination->getLimit())->offset($pagination->getOffset()); 
} 

, sınır yönetilmektedir İşte

cevap

19

yii\data\ActiveDataProvider modelleri hazırlarken ne olur otomatik olarak.

Sadece false için sayfalama ayarlayabilir ve sonra limit manuel ayar çalışacak

:

$dataProvider = new ActiveDataProvider([ 
    'query' => $query, 
    'pagination' => false, 
]); 
İlgili konular