📜  activerecord yii2 select with limit(start,end) not working - PHP (1)

📅  最后修改于: 2023-12-03 15:13:15.359000             🧑  作者: Mango

ActiveRecord Yii2中的带限制(start, end)的选择不起作用

在Yii2的ActiveRecord中,我们可以使用语句像这样来选择记录:

$records = MyTable::find()->where(['status' => 1])->all();

这将选择具有状态1的所有我的表格记录。

但是,如果我们想要一个限制,例如选择第10-20个记录,我们希望使用以下语句:

$records = MyTable::find()
    ->where(['status' => 1])
    ->limit(10, 20)
    ->all();

但是,这个查询不会返回我们预期的结果,而是返回所有记录。这是因为在Yii2中,limit()方法只需要一个参数-要选择的记录的数量。

解决方案

要使用带有限制的查询,我们需要手动创建查询语句。这是一个有效的解决方案,但比使用ActiveRecord查询语法更复杂。

$query = new Query();
$records = $query->select('*')
    ->from('my_table')
    ->where(['status' => 1])
    ->offset(10)
    ->limit(20)
    ->all();

使用offset()方法,我们可以指定我们希望从结果中跳过的记录数。在上面的例子中,我们要跳过前10个记录,然后选择接下来的20个。

结论

尽管在Yii2中使用ActiveRecord查询语法进行带限制的选择很方便,但如果我们需要使用限制和偏移量,我们需要手动创建查询语句。