我正在尝试使用带有OrderBy函数的关系方法按每个级别对学生列表进行排序,但是不幸的是,我无法使它起作用,我的代码中缺少什么?
注意: 每次我按我的代码删除订单都可以,但是学生级别却没有相应安排
控制器:
$students=Student::with('level')->where(['status' => 'ENROLLED'])->get()->orderBy('level_name','asc');
查看
<table>
<tr>
<th>Name</th>
<th>Level</th>
</tr>
@foreach($students as $std)
<tr>
<td>
{{$std->student_name}}
</td>
<td>
@foreach($std->level as $lv)
{{$lv->level_name}}
@endforeach
</td>
</tr>
@endforeach
</table>
答案 0 :(得分:1)
尝试一下:
控制器:
$students = Student::with(['level' => function (Builder $query) {
$query->orderBy('level_name', 'asc');
}])->where(['status' => 'ENROLLED'])->get();
此外,您可以将orderBy()
添加到关联方法。
学生模型:
public function level()
{
return $this->relationMethod(Level::class)->orderBy('level_name', 'asc');
}
答案 1 :(得分:0)
您无法通过关系进行订购,因为laravel在后台进行两个单独的查询。
您可以改用join
,类似这样(请注意,我猜到您的表名了,所以您可能必须更新它们)。
$users = Student::join('levels', 'students.level_id', '=', 'levels.id')
->orderBy('levels. level_name', 'asc')->select('students.*')->paginate(10);
答案 2 :(得分:0)
尝试一下
$students=Student::with('level')->where(['status' => 'ENROLLED'])->orderBy('level_name','asc')->get();