首页 > 解决方案 > laravel 雄辩的关系多重

问题描述

这是我的产品型号

public function orders(){
    return $this->hasMany(Order::class);
}

这是我的订单模型

 public function user(){
      return $this->belongsTo(User::class);
 }
 public function product(){
      return $this->belongsTo(Product::class);
 }

和我的订单表结构

在此处输入图像描述

这是我现在的回应(我正在使用订单模型)。

{
    id: 11,
    quantity: 2,
    customer: {
        id: 6,
        name: "saging",
        email: "saging@gmail.com",
        role_id: 3,
    },
    items: {
        id: 7,
        name: "Pellentesque semper",
        description: "raesent sit amet elementum purus. ",
        price: "72.21",
        cover_image: "7CPVS7yjqba9iJ7J.jpg",
    }
},

{
    id: 12,
    quantity: 2,
    customer: {
        id: 6,
        name: "saging",
        email: "saging@gmail.com",
        role_id: 3,
    },
    items: {
        id: 3,
        name: "Donec nec mattis ligula",
        description: "Pellentesque semper, augue at aliquet tincidunt",
        price: "33.21",
        cover_image: "ZJbbzjPwDXrcbkwi.jpg",
    }
 }

我目前使用的代码是

$products = Order::with('user','product');
return OrdersResource::collection($products->paginate(5));

products and customer我使用我的方法列出Order Model

我想要的输出是这样的

{
    id: 12,
    quantity: 2,
    customer: {
        id: 6,
        name: "saging",
        email: "saging@gmail.com",
        role_id: 3,
    },
    items: [
        {
            id: 3,
            name: "Donec nec mattis ligula",
            description: "Pellentesque semper, augue at aliquet tincidunt",
            price: "33.21",
            cover_image: "ZJbbzjPwDXrcbkwi.jpg",
        },
        {
            id: 7,
            name: "Pellentesque semper",
            description: "raesent sit amet elementum purus. ",
            price: "72.21",
            cover_image: "7CPVS7yjqba9iJ7J.jpg",
        }
    ]
 }

这是我的 OrderResource 代码

$sub_total = $this->quantity * $this->product->price;
$discount = round((10 / 100) * $sub_total, 2);
$total = $sub_total - $discount;

return [
    'id' => $this->id,
    'quantity' => $this->quantity,
    'address' => $this->address,
    'sub_total' => $sub_total,
    'discount' => $discount,
    'total_price' => $total,
    'created_at' => Carbon::parse($this->created_at)->format('F d, Y h:i:s A'),
    'customer' => $this->user,
    'items' => $this->product,
    ];

我的关系有问题吗?我是 laravel 的新手,雄辩的关系是我总是跳过的部分,因为我很困惑。但现在我必须面对它。

标签: laravellaravel-5

解决方案


订单和产品之间的关系存在问题,您必须设置多对多关系,因为您需要:

  • 创建它order_product应该包含的第三个表名order_idproduct_id

  • 在模型中设置关系:

    Product模型 :

    public function orders()
    {
        return $this->belongsToMany('App\Order');
    }
    

    Order模型 :

    public function products()
    {
        return $this->belongsToMany('App\Product');
    }
    
  • 最后你必须创建一个ProductResource并且OrderResource你必须这样做:

    return [
        'id' => $this->id,
        'quantity' => $this->quantity,
        'address' => $this->address,
        'sub_total' => $sub_total,
        'discount' => $discount,
        'total_price' => $total,
        'created_at' => Carbon::parse($this->created_at)->format('F d, Y h:i:s A'),
        'customer' => $this->user,
        'items' => ProductResource::collection($this->products)
        ];
    

推荐阅读