Php 在Laravel雄辩的ORM中使用数据透视表中的order by

Php 在Laravel雄辩的ORM中使用数据透视表中的order by,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,我有三张桌子: 1任务 2次访问 3任务访问 每次访问可以有0个或多个任务。我需要按访问次数对任务进行排序。例如,第一个任务有4次访问,第二个任务有10次访问等 在类似的情况下,我有两张表: 1名医生 2次访问 我按就诊次数给医生分类 在StatVisit控制器中: $tests = \App\Doctor::withCount(['visitsbydoctor' => function ($query) use ($a,$b){ $query->whereBetween('da

我有三张桌子:

1任务

2次访问

3任务访问

每次访问可以有0个或多个任务。我需要按访问次数对任务进行排序。例如,第一个任务有4次访问,第二个任务有10次访问等

在类似的情况下,我有两张表:

1名医生

2次访问

我按就诊次数给医生分类

在StatVisit控制器中:

$tests = \App\Doctor::withCount(['visitsbydoctor' => function ($query) use ($a,$b){
  $query->whereBetween('date', array($a,$b));
}])->orderBy('visitsbydoctor_count', 'desc')->paginate(1000000);
在医生模式中:

public function visitsbydoctor()
{
    return $this->hasMany(Visit::class);
}

如果是透视表,如何重写此代码?对于任务模型和StatVisit控制器,如医生案例。

使用完全相同的方法。也适用于多对多关系:

Task::withCount('visits')->latest('visits_count')->get()

我找到了下一个工作解决方案:

$tests1 = \App\Task::withCount(['taskvisit' => function ($query) use ($a,$b){
      $query->whereBetween('date', array($a,$b));
    }])->orderBy('taskvisit_count', 'desc')->paginate(1000000);


    public function taskvisit()
{
    return $this->belongsToMany(Visit::class)->withPivot('task_visit', 'visit_id');
}

它在您和我的版本中不起作用,我有如下错误:SQLSTATE[42S22]:未找到列:1054未知列“visions.task_id”在“where子句”SQL:select tasks.*,从tasks.id=visions.task_id且日期介于2017-11-01和2018-12-02之间的访问中选择count*作为任务订单中的taskvisit_计数,按taskvisit_计数描述限额1000000偏移0@befreeforlife如果关系名称与标准名称不同,请使用其名称。例如,如果关系名称为taskvisit,请执行以下操作:Task::withCount'taskvisit'->latest'taskvisit\u count'->getIt也不起作用。如果我理解正确,在透视表中,我们需要您使用“belongToMany”,并在透视表上有链接,如“withPivot”任务访问“,“访问id”。您可以在下面我的答案中看到,这是工作version@befreeforlife它是有效的,我刚刚在我的应用程序中用多对多关系测试了它。关系类型与withCount无关,它仍将生成relationshipname\u count动态列,您可以将该列与orderBy method.hm一起使用,这可能是另一个中的错误原因。谢谢你的帮助!您不需要在此处添加withPivot。withCount仍将有效,正如我在回答中所示。