【问题标题】:Mysql many-to-many relationship problem between two tablesMysql 多对多关系问题 两张表
【发布时间】:2021-07-18 17:07:40
【问题描述】:

首先,如果我的标题有误,我深表歉意。我找不到如何陈述我遇到的问题。我正在做一个 Laravel 项目。我有两个名为 orders 和 order_items 的表。

Mysql 表:

订单

  • order_id
  • 订单日期
  • order_customer_id

order_items

  • order_item_id
  • order_id
  • order_item_product_id
  • order_piece

我想要达到的图像:

我想以手风琴菜单的形式向用户显示他帐户中的订单以及属于该订单的产品。页面上可能有多个订单。当我尝试使用 leftJoin 时,自然会多次重复相同的顺序。我不明白这是我需要在 mysql 端还是 php 端解决的问题。你能给我一个关于这件事的指导吗?

我当前的代码:

$query = Order::query();
$query->where('order_customer_id', $customerID);
$query->leftJoin('order_items', 'orders.order_id','=','order_items.order_id');
$data['orderList'] = $query->get();
return view('pages.orders.index', $data);

【问题讨论】:

  • 请展示您的查询,您从中得到什么,以及您想要得到什么。
  • 非常感谢您的快速回复。我将代码添加到我的问题中。
  • 问题到底出在哪里?您的查询结果如何?
  • 你为什么使用leftJoin而不是关系?应该是Order::with('items')->all(),类似的,你的问题就解决了。分享您的 2 个模型,以便我们帮助您处理关系。还要考虑到您没有遵循标准关系的命名,您的表应该称为items,并且在您的列中有idorder_idproduct_idprice

标签: php mysql laravel join many-to-many


【解决方案1】:

从您的数据库中,我看到了它的一对多关系(不像您的标题所说的多对多)。

您可以在您的模型

中创建关系

OrderItem.php

public function order(){
    $this->belongsTo(Order::class);
}

Order.php

public function orderitem(){
    $this->hasMany(orderitem::class);
}

controller,获取订单

$orders = Order::with('orderitems')->get();
return view('yourview',compact('orders'))

查看

@foreach($orders as $order)
   {{$oder->name}}
   @foreach($order->orderitem as $orderItem)
       {{$orderItem->name}}
   @endforeach
@endforeach

【讨论】:

  • 如果你想要多对多,你可以再创建 1 个数据透视表,比如 Order_OrderItem,然后有 order_id 和 order_item_id 列
猜你喜欢
  • 2020-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-10
  • 2018-01-11
  • 1970-01-01
  • 2019-09-04
  • 2012-08-27
相关资源
最近更新 更多