こんにちはみんな私は次のコードを使用していますが、limit
は機能しませんが、コマンドが表示される場合はlimit
が表示されますが、クエリをActiveDataProvider
に渡すとフェッチされますすべての記録
$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
私がここでやっているのは何が悪いのですか?
yii\data\ActiveDataProvider
でモデルを準備すると次のようになります。
/**
* @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);
}
この部分に興味があります:
if (($pagination = $this->getPagination()) !== false) {
$pagination->totalCount = $this->getTotalCount();
$query->limit($pagination->getLimit())->offset($pagination->getOffset());
}
したがって、ページ付けがfalse
でないかどうかを確認できるように、制限は自動的に管理されます。
ページネーションをfalse
に設定するだけで、制限の手動設定が機能します。
$dataProvider = new ActiveDataProvider([
'query' => $query,
'pagination' => false,
]);