Laravel 5在模型中使用orderBy()

时间:2015-11-25 21:40:07

标签: php laravel laravel-5 laravel-5.1

所以我不能为我的生活弄清楚为什么我不能使用orderBy。我收到了错误:

  

调用未定义的方法Illuminate \ Database \ Eloquent \ Collection :: orderBy()

这是我的代码:

Route::get('/teams', function(){
$page = 'Teams';
$teams = App\Team::all()->orderBy('teamFirstName')->get();
return view('teams')->with('page', $page)->with('allTeams', $teams);
});

我尝试删除->get();我尝试过只使用Team::all。我正在使用Laravel备忘单,我似乎遵循Model语法。我还仔细检查过它是我的数据库中的正确列名,甚至尝试使用id。

如果我删除->orderBy(),则查询工作正常,我可以获得所有团队。那么我做错了什么?

2 个答案:

答案 0 :(得分:5)

这是因为all()返回的Collection没有orderBy方法(尽管它有一个sortBy方法可以使用)。以下内容稍微简单一点,应该表现得更好。

$teams = App\Team::orderBy('teamFirstName')->get();

调用all()后,将运行查询并获取结果,并且在此之后完成的任何排序都将由PHP完成。通常最好让数据库处理排序,因此在使用orderBy()获取结果之前先使用get()

答案 1 :(得分:2)

这一行:

$teams = App\Team::all()->orderBy('teamFirstName')->get();

需要:

$teams = App\Team::orderBy('teamFirstName')->get();

注意:

user3158900有一个很好的解释。