【发布时间】: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)
标签: php laravel database eloquent