在laravel中通过关系对用户进行排序

时间:2016-09-12 09:29:58

标签: php laravel sorting laravel-5

我想通过voornaam(名字)对用户进行排序。但我通过关系获取数据。

如何进行查询以便关系用户按字母按名字排序

我的职能:

public function sortfirstname($id) {
    $ingeschrevenspelers = UserToernooi::with('users')->where('toernooiid', '=', $id)->get()->all();
 //This query ^^


    $toernooi = Toernooi::findOrFail($id);

    dd($ingeschrevenspelers);
    return view('adminfeatures.generatespelerslijst', compact('ingeschrevenspelers', 'toernooi'));
}

我想要排序 enter image description here

感谢任何帮助

提前致谢

4 个答案:

答案 0 :(得分:2)

使用您自己的语言编写代码并不会让其他开发人员很容易理解您的代码。

话虽这么说,你可以尝试orderBy()方法来处理你的关系

在您定义关系的模型中:

public function relationship() 
{
    return $this->belongsTo(SomeClass::class)->orderBy('name', 'DESC');
}

答案 1 :(得分:1)

如果您不想修改Model类本身,可以替代Jordy Groote的答案,您可以使用闭包查询它。

$ingeschrevenspelers = UserToernooi::with(['users' => function($q) {  
    $q->orderBy('voornaam', 'asc');
}])->where('toernooiid', '=', $id)->get()->all();

参考https://laravel.com/docs/5.3/eloquent-relationships#constraining-eager-loads

旁注:当您已经->all()

时,我认为您不需要->get()

答案 2 :(得分:1)

不要在最后触发所有()功能,从而获得集合结果实例

//query without the all function
$ingeschrevenspelers = UserToernooi::with('users')->where('toernooiid', '=', $id)->get();

//
$ingeschrevenspelers = $ingeschrevenspelers->sortBy('users.firstname');

答案 3 :(得分:0)

$ingeschrevenspelers = UserToernooi::with(['users' => function($query){
    $query->orderBy('voornaam', 'asc');
}])->where('toernooiid', '=', $id)->get()->all();