所以我不能为我的生活弄清楚为什么我不能使用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()
,则查询工作正常,我可以获得所有团队。那么我做错了什么?
答案 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有一个很好的解释。