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

时间:2017-12-25 06:02:52

标签: php mysql laravel eloquent

我有三张桌子:

1)任务;

2)访问;

3)task_visit;

每次访问都可以有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控制器,如在医生案例中。

2 个答案:

答案 0 :(得分:0)

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

<%- include('some-template'); %>

答案 1 :(得分:0)

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

DECLARE @DROP VARCHAR(MAX)
DECLARE @TAB VARCHAR(MAX)='Employees'
DECLARE @CREATE VARCHAR(MAX)
DECLARE @SELECT VARCHAR(MAX)

--IF OBJECT_ID('DBO.'+@TAB,'U') IS NOT NULL
--BEGIN
IF (EXISTS (SELECT 1 
            FROM INFORMATION_SCHEMA.TABLES 
            WHERE TABLE_SCHEMA = 'dbo' 
              AND TABLE_NAME = @TAB))
BEGIN
    SET @DROP = N'DROP TABLE '+@TAB
    EXEC(@TAB)
END

SET @CREATE= 'CREATE TABLE '+@TAB+
    '(
        ID INT
        ,NAME VARCHAR(50)
        ,PHONE VARCHAR(25)
        ,ADDRESS VARCHAR(100)
    )'

EXEC(@CREATE)
SET @SELECT='SELECT * FROM '+@TAB
EXEC(@SELECT)