按 id 分组 Laravel Eloquent 枢轴值
Posted
技术标签:
【中文标题】按 id 分组 Laravel Eloquent 枢轴值【英文标题】:Group Laravel Eloquent pivot values by id 【发布时间】:2021-12-28 10:37:48 【问题描述】:我有一个关系数据库,其模型如下所示: 餐厅:
class Restaurant extends Authenticatable
public function dishes()
// return $this->hasMany(Dish::class);
return $this->belongsToMany('App\Models\Dish');
菜:
class Dish extends Model
public function orders()
return $this->belongsToMany('App\Models\Order')->withPivot('quantity');
public function restaurant()
return $this->belongsToMany('App\Models\Restaurant');
订购
class Order extends Model
public function dishes()
return $this->belongsToMany('App\Models\Dish');
我正在按 id 检索属于餐厅的所有订单,如下所示:
public function index($id)
$user_id = $id;
$dishes = Dish::where('restaurant_id', $user_id)->get();
foreach ($dishes as $dish => $value)
$orders = $value->orders;
foreach ($orders as $order => $value)
$response[] = $value;
return response()->json($response);
这可行,但我想以某种方式按 order_id 对这些结果进行分组,以便返回类似于以下内容的内容:
"id": 28,
"status": 1,
"address": "Fish Street",
"user_name": "Artyom",
"user_surname": "Pyotrovich",
"phone": "351 351 643 52",
"email": "artyom@restaurant.com",
"total": 35.8,
"created_at": "2021-11-17T10:44:58.000000Z",
"updated_at": "2021-11-17T10:44:58.000000Z",
"dishes": [
"dish_id": 22,
"quantity": 3
,
"dish_id": 23,
"quantity": 1
]
这是否可以通过简单地更改 Eloquent 查询来实现,或者我是否需要对当前查询的结果执行多个操作?还对这些情况下的最佳实践感兴趣。 提前致谢
【问题讨论】:
一个订单属于很多菜还是一个订单有很多菜?第二种方法可以产生理想的结果,因为菜肴是按顺序排列的。 Orders 和 Dishes 是多对多关系(两个模型都使用 belongsToMany) 【参考方案1】:您可以使用::with()
方法来获取所有所需的关系,这比foreach 重写要干净得多。
示例:
$orders = Order::with('dishes')
->whereHas('dishes', function(Builder $dishes) use ($user_id)
$dishes->where('restaurant_id', $user_id);
)->get();
return response()->json( $order );
小记:
把用户id和餐厅id分开,如果用户有多家餐馆怎么办?
【讨论】:
以上是关于按 id 分组 Laravel Eloquent 枢轴值的主要内容,如果未能解决你的问题,请参考以下文章
Laravel Eloquent 查询,带有连接、计数和分组依据