型号:
我希望对每个OrderList的OrderListItems进行排序:
我做什么:
preferences = {'bacon':5,'ham':-2,'salami':1}
#...
for i, sandwich in enumerate(sandwiches):
for filling in sandwich:
sandwichscores[i] += preferences.get(filling, 0)
无法按类别名称排序。我已经搜索了几个小时,但没有找到答案。是否可以在雄辩的ORM中执行类似的操作?顺便说一句,Django能够以一种非常不错的方式做到这一点。
答案 0 :(得分:0)
您可以将HasManyThrough
关系用作BelongsToThrough
,并将其与经过修改的withCount().
结合使用,这不是最优雅的解决方案,但它可以工作:
class OrderListItem extends Model {
public function category() {
return $this->hasManyThrough(Category::class, Item::class,
'id', 'id', 'item_id', 'category_id');
}
}
$order_lists = OrderList::where('kitchen_id', $user->id)
->with(['order_list_items' => function ($q) use ($grouped) {
$q->when($grouped, function ($q) {
return $q->withCount(['category as category_name' => function ($q) {
$q->select('categories.name');
}])->orderBy('category_name');
}, function ($q) {
return $q->orderBy('kitchen_sort_order', 'asc');
})->with('supplier')
->with(['item' => function ($q) {
return $q->with('category');
}]);
}])->get();