多对多关系:在数据透视表上按顺序排列不起作用。

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

我有这些关系 schoolassociate 模型。

// School model
public function associates()
{
    return $this->belongsToMany('Associate', 'school_associate', 'school_id', 'associate_id')
        ->withPivot('start_date', 'end_date');
}

// Associate model
public function schools()
{
    return $this->belongsToMany('School', 'school_associate', 'associate_id', 'school_id')
        ->withPivot('start_date', 'end_date');
}

我需要得到一个学校的所有关联词,按start_date排序。

这是我试过的,但没有成功(在这次尝试中,我在所有学校中搜索)。

dd(\App\Associate::with(['schools' => function ($q) {
    $q->orderBy('pivot_start_date', 'desc');
}])->toSql());

我得到的是这样的SQL语句(注意没有 order by 子句)。)

select * from `associate`

我试图编辑这样的关系。

// Associate model
public function schools()
{
    return $this->belongsToMany('School', 'school_associate', 'associate_id', 'school_id')
        ->withPivot('start_date', 'end_date')
        ->orderBy('pivot_start_date', 'desc'); // also tried without "pivot_"
}

而根据 此职位我也试过了。

// Associate model
public function schools()
{
    return $this->belongsToMany('School', 'school_associate', 'associate_id', 'school_id')
        ->withPivot('start_date', 'end_date')
        ->orderBy('school_associate.start_date', 'desc');
}

但我总是得到相同的查询,结果没有排序。

many-to-many sql-order-by laravel-6
1个回答
0
投票

我是这样使用查询构建器解决的。这个函数是在 Associate 模。

public function scopeLast($query, $school_ids = [])
{
    $query->join('school_associate', "{$this->table}.{$this->primaryKey}", '=', 'school_associate.associate_id')
        ->join('school', 'school.school_id', '=', 'school_associate.school_id')
        ->whereIn('school.school_id', $school_ids)
        ->orderBy('school_associate.start_date', 'desc');

    return $query;
}
© www.soinside.com 2019 - 2024. All rights reserved.