我有三个表,users
,branches
和jobs
。 users
表与branches
表具有一对一的关系,与jobs
表具有一对多的关系。分支机构负责上传作业,users
表可以包括各种类别,包括分支。 branches
和jobs
表都将user_id作为外键。 现在我想获取分支列表,其中列出了他们上传的工作数量,并按照最高上传次数对其进行排序。
我能够显示分支列表以及它们发布的作业数量,如下面的代码所示,但我想根据发布的作业数量进行排序。我怎样才能做到这一点?
@foreach(\App\Branch::all() as $branchesJob)
<div class="col-lg-3 col-xs-3">
<div class="small-box bg-olive-active">
<div class="inner">
<h3>{{\App\Job::where('user_id','=',$branchesJob->user->id)->count()}}</h3>
<p>{{$branchesJob->branch_name}}</p>
</div>
<a class="small-box-footer" href="{{(route('admin.branch_job.show',$branchesJob->id))}}">
More info
<i class="fa fa-arrow-circle-right"></i>
</a>
</div>
</div>
@endforeach
答案 0 :(得分:0)
您无法完成检索模板中的所有记录。并且你将无法通过单独的聚合函数(计算关系)来完成它。
我会使用带有order by的join子句来完成,正如标记正确的答案在这里解释的那样: Laravel Eloquent sort by relation table column
答案 1 :(得分:0)
感谢您的回复。我可以使用sortBy()
和count()
方法完成此操作。
$user = \App\User::where('category','=','Branch')->with('job')->get()->sortBy(function($u){
return count($u->job);
}, $options = SORT_REGULAR, $descending = true);