laravel - 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 的新手,雄辩的关系是我总是跳过的部分,因为我很困惑。但现在我必须面对它。
解决方案
订单和产品之间的关系存在问题,您必须设置多对多关系,因为您需要:
创建它
order_product
应该包含的第三个表名order_id
和product_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) ];
推荐阅读
- django - 即使对于 django 中的登录用户,主视图也会不断重定向到登录页面
- php - 通过可恢复上传签名的 url 设置对 Google Cloud Storage 对象的公开访问
- c# - 无法从 Windows 服务打开 Excel 工作簿
- windows - 为 Powershell 脚本创建一个 Potocol 处理程序
- google-cloud-platform - 从 GCP 连接到 VPN
- java - OpenGL嵌套模板
- class - 成员函数看不到类的私有成员
- python - 如何在 txt 中拆分没有空格的行以在 python 中执行数据框?
- d - D 中的“==”和“is”运算符到底是什么比较?
- wordpress - 以编程方式删除子类别和分配的帖子