laravel 如何基于具有一对多关系的列进行排序

4szc88ey  于 2023-01-14  发布在  其他
关注(0)|答案(2)|浏览(168)

我想做的是:
我有两个具有一对多关系的表

部门

id
name
position
set_plan_id

座位计划

id
name
order

我想根据seat_plans中的*order字段(数字类型,因此按升序排序)对所有sectors进行排序。
我试过这个代码,但我得到未排序的部门。

$sectors= Sector::whereHas('seat_plan', function ($query) {                                         
            $query->orderBy('order'); 
        })->get();

有谁能帮帮我吗?谢谢大家

xdnvmnnf

xdnvmnnf1#

您可以选择与表进行连接,如下所示:

$sectors = Sector::join('seat_plans', 'seat_plans.id', '=', 'sectors.seat_plan_id')
    ->orderBy('seat_plans.order')
    ->select('sectors.*')
    ->get();

或者使用如下所示的聚集方法:

$sectors = Sector::withAggregate('seat_plan', 'order')
   ->orderBy('seat_plan_order')
   ->get();

参考:https://laravel.com/api/9.x/Illuminate/Database/Eloquent/Concerns/QueriesRelationships.html#method_withAggregate

wko9yo5t

wko9yo5t2#

试试这个:

Sector::select('sectors.*')
    ->join('seat_plans', 'seat_plans.id', 'sectors.seat_plans_id')
    ->orderBy('seat_plans.order')
    ->get();

要了解更多方法,请查看link

相关问题