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

时间:2016-04-09 12:25:23

标签: php mysql laravel eloquent blade

在我的项目中,我的订单包含许多产品和订单众多的客户。我很困惑,因为我希望获得某个客户拥有的所有订单以及每个订单的产品。我把某些东西搞砸了,我不确定我是否正确地建立了自己的关系。这是我的产品表:

enter image description here

这是我的客户表:

enter image description here

这是我的订单表:

enter image description here

以下是我的模特:

产品:

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

这是输出:

enter image description here

如果有人可以解释为什么它不输出所有内容并提供一些建议,如果这是关系的方式,我会非常感激。

2 个答案:

答案 0 :(得分:1)

您的产品应属于订单,而不是具有多对多关系。

getCityName

答案 1 :(得分:0)

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

enter image description here

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');
    }
}

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

class Customer extends Model
{
    public function orders()
    {
        return $this->hasMany('App\Order');
    }
}