在Laravel 5中根据子关系对计数进行排序

时间:2016-03-02 17:07:31

标签: php laravel laravel-5

我有三个表,usersbranchesjobsusers表与branches表具有一对一的关系,与jobs表具有一对多的关系。分支机构负责上传作业,users表可以包括各种类别,包括分支。 branchesjobs表都将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

2 个答案:

答案 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);

感谢这篇文章!   Laravel OrderBy relationship count