Laravel hasManyThrough 深入

Posted

技术标签:

【中文标题】Laravel hasManyThrough 深入【英文标题】:Laravel hasManyThrough in depth 【发布时间】:2017-12-08 17:44:37 【问题描述】:

我一直在查看有关 Laravel 中 hasManyThrough 关系的文档,出于某种原因,我正在努力解决它,因为文档使它看起来很简单(也许我想多了)......

我目前有三个模型表:

-User (extends authenticatable)
    id, 
    name, 
    surname, 
    email, 
    password.

-Order
    id, 
    user_id, 
    name, 
    unit, 
    qty

-Product (i need to add a qty table to show how many is ordered).
    id, 
    order_id, 
    name, 
    unit, 
    description, 
    family

管理员将我的产品模型用于 CRUD 产品。

请有人向我解释一下我将如何向管理员显示哪个用户下了订单,以及订单的组成部分。 我还想向用户显示“订单历史记录”..

请任何人都可以提供帮助..

更新

-order_product
  id,
  order_id,
  product_id
  quantity

产品负责人:

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

订单控制器:

  public function products()
    
       return $this->belongsToMany('App\Product')->withPivot('quantity');
    

【问题讨论】:

提及表格字段 用户字段:id、name、surname、email、password。订单字段:id、user_id、name、unit、qty 产品字段:id、order_id、name、unit、description、family 它的多对多关系。没有多少经过。并且您的数量表应命名为 order_product,其中应包含 id、product_id、order_id、qty laravel.com/docs/5.4/eloquent-relationships#many-to-many 等字段 所以我将有一个名为“order_product”的数据透视表,我最初是这么想的,但在我开始之后,我想知道如果它没有 user_id 列,它将如何跟踪哪个用户下订单?跨度> 用户 ID 列在您的产品表中。您可以按 user_id 对所有订单进行分组。 【参考方案1】:

关系显示是多对多的,您必须创建另一个名为的数据透视表 order_product 带字段

-id

-order_id

-product_id

-数量

并在您的订单表模型中将关系定义为

public function products()

  return $this->belongsToMany('App\Product')->withPivot('quantity');

并在您的产品表模型中将关系定义为

public function orders()

  return $this->belongsToMany('App\Order')->withPivot('quantity');

检索数据

$order= App\Order::find(1);

@foreach ($order->products as $product)
    echo $product->pivot->quantity."<br>";
@endforeach

【讨论】:

我现在很困惑。我需要通过 user_id 搜索订单,user_id 必须包含该用户曾经下过的所有订单,如果我点击其中一个订单,必须出现订购的产品列表? 发布有问题的代码,以便清楚了解您到目前为止所做的工作 对不起,我是堆栈溢出的新手,我似乎无法以正确的格式获取我的代码 点击问题下方的编辑并在末尾提及新代码 如何获取数据?提及输出【参考方案2】:

我认为您需要再创建一个类似 order_details 的表

-User (extends authenticatable)
    id, 
    name, 
    surname, 
    email, 
    password.

-Order
    id, 
    user_id, 
    name, 
    unit, 
    qty

-Product (i need to add a qty table to show how many is ordered).
    id, 
    name, 
    unit, 
    description, 
    family
-Order_detail(Store product_id, order_id (You can put qty to this table))
    id,
    order_id,
    product_id

【讨论】:

以上是关于Laravel hasManyThrough 深入的主要内容,如果未能解决你的问题,请参考以下文章

通过 Laravel 关系查询 HasManyThrough 检索相关记录

Laravel:如何平均嵌套 hasMany 关系(hasManyThrough)

Laravel 5 hasManyThrough 数据透视表

Laravel 5 hasManyThrough 重复行内容

Laravel Eloquent: hasManyThrough 多对多关系

Laravel HasManyThrough 深度关系