laravel orderby嵌套相关模型

时间:2018-04-30 09:33:29

标签: php laravel eloquent

我的模型名称为"Date",其关系(one-to-one)"Tour""Tour"模型的关系(many-to-many)"Type"模型。 我想根据"Type"名称订购我的日期记录。不幸的是,我没有任何线索可以用雄辩的方式来做。

Date model:

public function Tour()
{
    return $this->belongsTo('\App\Tour');
}

Tour model:

public function Date()
    {
        return $this->hasOne('\App\Date','tour_id');
    }
 public function Types()
    {
        return $this->belongsToMany('\App\Type');
    }

Type model:

public function Tours()
    {
        return $this->belongsToMany('\App\Tour');
    }

和我的controller输出:

public function tourList()
    {

        $dates = new Date();
        $dates = $dates->orderBy('id','asc')
            ->paginate(6)
            ->appends([
            'sort_price' => request('sort_price'),
            'minmax' => request('minmax'),
            'type' => request('type')
        ]);
        return view('primary.Tour.list', compact(['dates']));
}

2 个答案:

答案 0 :(得分:0)

$dateRes = Date::join('type_tour as TT', 'TT.tour_id', '=', 'date.tour_id')
         ->join('type as T','TT.type_id','=','T.id')
         ->orderBy('T.name')
         ->get();

看看它是否适合你。

答案 1 :(得分:0)

如果要基于嵌套关系列对结果进行排序,则必须使用连接链:

$result= Date::join('tours','tours.id','=','dates.tour_id')
->leftJoin('type_tour','type_tour.tour_id','=','tours.id')
->leftJoin('types','types.id','type_tour.type_id')
->orderBy('types.name')->get();

确保游览和类型表之间的关系中间表是type_tour 可能是tour_type或其他东西...

请注意,如果要按多列排序,则可以根据需要添加'orderBy'子句:

->orderBy('Types.id', 'DESC')->orderby('Types.name', 'ASC') //... ext

在这里检查我的答案: https://stackoverflow.com/a/61194625/10573560