Laravel Eloquent:订购所有()的结果

时间:2013-07-02 15:18:43

标签: laravel laravel-4 eloquent sql-order-by

我坚持一项简单的任务。 我只需要订购来自此次电话会议的结果

$results = Project::all();

Project是模型的地方。我试过这个

$results = Project::all()->orderBy("name");

但它没有用。从表中获取所有数据并获取它们的更好方法是哪种?

12 个答案:

答案 0 :(得分:313)

您实际上可以在查询中执行此操作。

$results = Project::orderBy('name')->get();

这将以正确的顺序返回所有结果。

答案 1 :(得分:92)

如果你还想使用all(),你仍然可以使用sortBy(在集合级别)而不是orderBy(在查询级别),因为它返回了一个对象集合。

升序

$results = Project::all()->sortBy("name");

降序

$results = Project::all()->sortByDesc("name");

有关详细信息,请查看有关集合的文档。

https://laravel.com/docs/5.1/collections

答案 2 :(得分:24)

此外,只是为了支持以前的答案,可以通过添加第二个参数,以降序desc或升序asc顺序对其进行排序。

$results = Project::orderBy('created_at', 'desc')->get();

希望这有帮助。

答案 3 :(得分:10)

2017年更新

Laravel 5.4为查询构建器添加了orderByDesc()方法:

$results = Project::orderByDesc('name')->get();

答案 4 :(得分:8)

虽然您需要日期结果为desc

$results = Project::latest('created_at')->get();

答案 5 :(得分:4)

执行此操作

$results = Project::orderBy('name')->get();

不要这样做:

$results = Project::all()->sortBy('name');

答案 6 :(得分:2)

查看Eloquent的sortBy方法:http://laravel.com/docs/eloquent

答案 7 :(得分:1)

请注意,您可以这样做:

$results = Project::select('name')->orderBy('name')->get();

这会生成一个查询,例如:

"SELECT name FROM proyect ORDER BY 'name' ASC"

在某些应用中,当数据库未优化且查询更为复杂,并且需要防止在完成的SQL中生成ORDER BY时,您可以执行以下操作:

$result = Project::select('name')->get();
$result = $result->sortBy('name');
$result = $result->values()->all();

现在是由php来订购结果。

答案 8 :(得分:0)

您的指令需要调用才能获得,因为它会带来记录并按目录排序

$results = Project::orderBy('name')
           ->get();

示例:

$results = Result::where ('id', '>=', '20')
->orderBy('id', 'desc')
->get();

在该示例中,数据按“ where”过滤,并带来大于20的记录和按从高到低的顺序按orderBy目录。

答案 9 :(得分:0)

尝试一下:

$categories     =   Category::all()->sortByDesc("created_at");

答案 10 :(得分:0)

在 Laravel Eloquent 中,您必须创建如下查询,它将从数据库中获取所有数据,您的查询不正确:

$results = Project::all()->orderBy("name");

你必须这样使用它:

$results = Project::orderBy('name')->get();

$results = Project::orderBy('name', 'asc')->get();

$results = Project::orderBy('name', 'desc')->get();

答案 11 :(得分:-1)

一个有趣的事情是多个订单:

根据laravel docs

DB::table('users')
   ->orderBy('priority', 'desc')
   ->orderBy('email', 'asc')
   ->get();

这意味着 Laravel 将根据 priority 属性对结果进行排序。完成后,它会在内部根据 priority 使用相同的 email 对结果进行排序。

编辑:

正如@HedayatullahSarwary 所说,建议优先使用 Eloquent 而不是 QueryBuilder。当然,我不鼓励使用 QueryBuilder,我们都知道每个都有自己的用例。

为什么我用 QueryBuilder 写了一个答案?正如我们在 eloquent documents 中看到的:

<块引用>

您可以将每个 Eloquent 模型视为一个强大的查询构建器,允许您流畅地查询与模型关联的数据库表。

顺便说一句,上面带有 eloquent 的代码应该是这样的:

Project::orderBy('priority', 'desc')
->orderBy('email', 'asc')
->get();