在Laravel的Eloquent ORM中使用数据透视表数据中的order by

问题描述 投票:0回答:2

我有三张桌子:

1)任务;

2)访问;

3)task_visit;

每次访问都可以有0个或几个任务。我需要按访问次数对任务进行排序。例如,第一项任务有4次访问,第2次 - 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);
}

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

php mysql laravel eloquent
2个回答
0
投票

使用绝对相同的方法。 withCount()也适用于多种关系:

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

0
投票

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

$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');
}
© www.soinside.com 2019 - 2024. All rights reserved.