Laravel 5 中按行排序并限制结果

问题描述 投票:0回答:5

我正在尝试从基于 Laravel 5 的应用程序中的数据库获取结果,但我一生都无法弄清楚。

我想从名为 count 的行中选择前 5 个结果 DESC。 这就是我所拥有的:

$full = Fulls::all()->orderBy('count', 'desc')->take(5)->get();

我也尝试了很多其他方法,但似乎没有任何效果。现在我收到错误:

indexController.php第19行中的FatalErrorException:调用未定义 方法 Illuminate\Database\Eloquent\Collection::orderBy()

但是,无论我往哪里看,我都会看到人们在使用

orderBy()
工作,所以...我做错了什么?

提前致谢...

php laravel eloquent
5个回答
29
投票

您应该使用

Fulls::orderBy(..)->take(5)->get()
来代替。


4
投票

如果您想对集合进行排序/排序,可以使用 sortBy() 方法。

例如。

$full = Fulls::get(); // Get the Fulls collections
$full = $full->sortBy('count')->take(5); 

1
投票

您可以跳过偏移

$full = Fulls::orderBy('count', 'desc')->skip(0)->take(5)->get(); //get first 5 rows
$full = Fulls::orderBy('count', 'desc')->skip(5)->take(5)->get(); //get next 5 rows

实际的 mysql 查询将如下所示:

SELECT * FROM fulls ORDER BY count DESC LIMIT 0,5

0
投票

您可以使用laravel的

skip
take
功能以及
orderBy

Fulls::where([['user_id','=',auth()->user()->id]])
                ->where([['title','LIKE',"%".$text_val."%"]])
                ->orderBy('id','DESC')
                ->skip($offset)
                ->take(2)

0
投票

您编写的代码存在逻辑问题,因为您错误地链接了 Eloquent 方法。 orderBy 和 take 方法应在 get 方法之前使用。 get 方法检索结果并结束查询构建过程。

$full = Fulls::orderBy('count', 'desc')->take(5)->get();
© www.soinside.com 2019 - 2024. All rights reserved.