我被一项简单的任务困住了。 我只需要安排这次通话的结果

$results = Project::all();

其中Project是一个模型。我试过了

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

但这并没有起作用。从表中获取所有数据并对其进行排序的更好方法是什么?


当前回答

注意,你可以这样做:

$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对结果进行排序。

其他回答

一个有趣的事情是多重顺序:

根据laravel文档:

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

这意味着laravel将根据优先级属性对结果进行排序。当它完成时,它将根据内部电子邮件以相同的优先级排序结果。

编辑:

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

无论如何,为什么我用QueryBuilder写了一个答案?正如我们在雄辩的文献中看到的:

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

BTWS上面带有eloquent的代码应该是这样的:

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

此外,为了支持前一种答案,还可以将其作为第二个参数添加,从而按降序desc或升序asc进行排序。

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

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

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

这将以适当的顺序返回所有结果。

注意,你可以这样做:

$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对结果进行排序。

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

升序排序

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

降序排列

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

请查看关于集合的文档以获得更多详细信息。

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