【发布时间】:2018-08-05 09:55:12
【问题描述】:
型号:
- 类别(ID、名称)
- 项目(id、名称、category_id、...)
- OrderList (id, user_id, ...)
- OrderListItem(id, item_id, order_list_id, user_sort_order, ...)
我希望对每个 OrderList 的 OrderListItems 进行排序:
- 按用户排序顺序
- 或按类别名称
我做什么:
$grouped = $request->input('grouped', false) === "true";
$user = User::findOrFail($id);
$order_lists = OrderList::where('kitchen_id', $user->id)
->with(['order_list_items' => function ($q) use ($grouped) {
$q->when($grouped, function ($q) {
return $q->with(['item' => function ($q) {
return $q->with(['category' => function ($q) {
return $q->orderBy('name', 'asc');
}]);
}]);
}, function ($q) {
return $q->orderBy('kitchen_sort_order', 'asc');
})->with('supplier')
->with(['item' => function ($q) {
return $q->with('category');
}]);
}])->get();
按类别名称排序不起作用。我一直在寻找几个小时,但没有找到答案。有可能在 Eloquent ORM 中做这样的事情吗?顺便说一句,Django 能够以非常好的方式做到这一点。
【问题讨论】:
-
您需要使用join来按相关字段排序。仅使用 Eloquent 是不可能的,afaik。
标签: php laravel eloquent sql-order-by