有没有一种方法可以在Laravel的ELOQUENT ORM中“限制”结果?

145
有没有一种方法可以使用Laravel的ELOQUENT ORM“限制”结果?
 SELECT * FROM  `games` LIMIT 30 , 30 

那么使用 Eloquent 呢?

4个回答

254
创建一个继承自Eloquent的Game模型,并使用以下代码:
Game::take(30)->skip(30)->get();

take() 在这里将获取30条记录,skip() 在这里将偏移30条记录。


在最近的Laravel版本中,您还可以使用:

Game::limit(30)->offset(30)->get();

可以请您看一下这个与Laravel ORM相关的问题吗:https://stackoverflow.com/questions/59956706/laravel-randomly-select-n-number-of-rows-containing-same-value-in-certain-colu? - Istiaque Ahmed

20

我们可以像下面这样使用 LIMIT:

Model::take(20)->get();

看起来你正在使用 take 而不是 limit。 - twigg
3
在这种情况下,“take”只是“limit”的别名。请参见https://github.com/laravel/framework/blob/5.7/src/Illuminate/Database/Query/Builder.php#L1896。 - Xartrick

19

如果您想对结果进行分页,请使用集成的paginator,它非常好用!

$games = Game::paginate(30);
// $games->results = the 30 you asked for
// $games->links() = the links to next, previous, etc pages

6
太棒了!使用 Bootstrap,你代码中只需要添加 $games = Game::paginate(30) 控制器和 {{ $games->links() }} 视图就可以搞定所有事情。真的非常方便,喜欢 Laravel! - david_nash

0

此外,我们可以按以下方式使用它

仅获取第一个

 $cat_details = DB::table('an_category')->where('slug', 'people')->first();

通过限制和偏移获取

$top_articles = DB::table('an_pages')->where('status',1)->limit(30)->offset(0)->orderBy('id', 'DESC')->get();
$remaining_articles = DB::table('an_pages')->where('status',1)->limit(30)->offset(30)->orderBy('id', 'DESC')->get();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接