【问题标题】:Order Items can't display in purchase order view in Laravel订单项目无法在 Laravel 的采购订单视图中显示
【发布时间】:2019-03-01 18:29:20
【问题描述】:

您好,需要您的帮助。我无法在订单视图中显示订单商品。我正在使用 belongsToMany 关系。

订单模式

public function orderitems()
{
    return $this->belongsToMany('App\Orderitems', 'id', 'order_id')->orderBy('created_at', 'DESC');
    // return $this->belongsToMany(Orderitems::class)->orderBy('created_at', 'DESC');
}

订单项模型

public function orders()
{
    return $this->belongsToMany('App\Orders', 'id','order_id');
}

秀剑

@foreach($orders->orderitems as $orderitem)
<tr>
    <td>{{ $orderitem->product_code }}</td>
    <td>{{ $orderitem->product_name }}</td>
    <td>{{ $orderitem->quantity }}</td>
    <td>{{ $orderitem->total_cost }}</td>
</tr>
@endforeach

订单控制器

public function show($id)
{
    $orders = Orders::find($id);
    return view('orders.show')->with('orders', $orders);
}

希望你能帮助我。非常感谢您!

更新 我改变了关系,而不是多对多,我使用 一对多 意识到许多项目只有一个订单,我遵循@Tim 的约定。这是我的模型和控制器的样子

订单模型

public function orderItems()
{
    return $this->hasMany('App\Orderitems', 'id', 'order_id')->orderBy('created_at', 'DESC');
}

订单项模型

public function orders()
{
    return $this->belongsTo('App\Orders','id','order_id');
}

控制器

public function show($id)
{
    $order = Orders::find($id);
    $orderItems = $order->orderItems; 
    dd($order->orderitems);
    Log::info($order);
    var_dump($order);        
}

dd 的结果为空

【问题讨论】:

  • 这么多约定问题...模型名称是单数的,Order,而不是 Orders,变量名称应该是 $order,因为 ::find() 返回单个订单,而不是多个,关系是通常是camelCase orderItems() 或snake_case order_items() 等。话虽如此,请尝试在您的控制器中运行dd($orders-&gt;orderitems) 以查看是否实际附加了订单项。
  • 我怀疑这里可能存在两个主要问题:1) belongsToMany 不是您要实现的层次结构的正确关系类型; 2) order_id 被设置为你最终的belongsToMany 两边的第一个外键,导致矛盾两者都会导致返回一个空数组。再次检查您的数据库关系结构。
  • 嗨@TimLewis 我刚刚采纳了你的建议。它给了我这个错误,--- SQLSTATE[42S02]: Base table or view not found: 1146 Table 'brandexpertpos.id' doesn't exist (SQL: select order_items.*, id.order_id as pivot_order_id, id.orderitems_id as pivot_orderitems_id from order_items inner join id on order_items.id = id.orderitems_id orderitems_id where @986545.@2按created_at desc 订购)(查看:E:\wamp64\www\brandExpertPOS\resources\views\orders\show.blade.php)
  • 嗨@D.Petrov 你有什么建议?
  • 是的,我错了,对不起,我的错,嗯,你不认为在逆关系 orderitems 中这应该切换'id','order_id' 吗?我认为蒂姆刘易斯在公约问题上是正确的......

标签: laravel


【解决方案1】:

当使用多对多belongsToMany时,需要在Order模型中

1- 订单项类

2-多对多表名

3- 订单 ID(父级)

4- 订单项 ID(在这种情况下为儿童)

但是当您切换到一对多 hasMany 时,您只需要外键。在订单模型中使用:

<?php
// in Orders model
public function orderItems()
{
    return $this->hasMany('App\Orderitems', 'order_id')->orderBy('created_at', 'DESC');
}

在 Orderitems 模型中:

<?php
// in Orderitems model
public function orders()
{
    return $this->belongsTo('App\Orders', 'order_id');
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多