无法在 Laravel 中的模型视图中显示数据

Posted

技术标签:

【中文标题】无法在 Laravel 中的模型视图中显示数据【英文标题】:Can't display data in view from model in Laravel 【发布时间】:2016-07-30 17:29:32 【问题描述】:

在我的项目中,我有很多产品的订单和有很多订单的客户。我很困惑,因为我想获得某个客户的所有订单以及每个订单的产品。我在某个地方搞砸了一些事情,我不确定我是否正确设置了我的关系。这是我的产品表:

这是我的客户表:

这是我的订单表:

这是我的模型:

产品:

class Product extends Model

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

订单:

class Order extends Model

    public function products()
    
        return $this->hasMany('App\Product', 'id');
    

    public function customer()
    
        return $this->belongsTo('App\Customer');
    

客户:

class Customer extends Model

    public function orders()
    
        return $this->hasMany('App\Order', 'id');
    

我在我的 CustomersController 中使用 App\Customer::all() 从我的数据库中获取所有客户,并在我的 customers.blade.php 中传递数据。

<h1>Customers:</h1>
    @foreach($customers as $customer)
        <h3>$customer->name</h3>
        @foreach($customer->orders as $order)
        <p>Order ID: $order->id</p>
            @foreach($order->products as $product)
            <p>Product title: $product->title</p>
            @endforeach
        @endforeach
        <hr>
    @endforeach

这是输出:

如果有人能解释为什么它没有输出所有内容并给出一些建议,如果这是处理关系的方式,我将非常感激。

【问题讨论】:

尝试将 更改为 !! !! 为了模型更改return $this-&gt;hasMany('App\Product', 'id');return $this-&gt;hasMany('App\Product'); 【参考方案1】:

您的产品应该属于一个订单,而不是多对多的关系。

class Product extends Model

    public function orders()
    
         return $this->belongsTo('App\Order');
    

【讨论】:

我更改了它,但它仍然没有按照客户的顺序打印所有产品。 抱歉没有早点回复,我已经离开一天了。没有意识到您实际上需要多对多关系,但我很高兴您自己找到了正确的答案。 :)【参考方案2】:

我找到了一个解决方案,方法是为产品和订单制作一个名为 products_orders 的数据透视表,其中包含 product_id 和 order_id,并在 Product 和 Order 之间建立多对多关系。那是因为一个订单可能有多个产品,并且产品可能存在于多个订单中。 我的数据透视表 products_orders:

class Product extends Model

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


class Order extends Model

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

    public function customer()
    
        return $this->belongsTo('App\Customer');
    

我为客户和订单建立了一对多关系(订单表中的客户 ID),现在一切正常。

class Customer extends Model

    public function orders()
    
        return $this->hasMany('App\Order');
    

【讨论】:

以上是关于无法在 Laravel 中的模型视图中显示数据的主要内容,如果未能解决你的问题,请参考以下文章

Laravel:无法在视图中显示多对多关系

Laravel 5.4:无法在视图中显示 crud 内容

在视图中显示图像 Laravel 6

Laravel 将数据从 ajax 传递到位于单独文件中的模态视图,导致模态视图无法呈现

如何在 laravel 刀片视图中打破 foreach 循环?

如何从 laravel 框架中的模型中的表中获取数据并直接在视图中使用?