【问题标题】:Group Laravel Eloquent pivot values by id按 id 分组 Laravel Eloquent 枢轴值
【发布时间】: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


【解决方案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分开,如果用户有多家餐馆怎么办?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-25
    • 2019-07-27
    • 2022-01-09
    • 1970-01-01
    • 2014-10-23
    • 1970-01-01
    • 1970-01-01
    • 2019-07-24
    相关资源
    最近更新 更多