如何处理订单有很多物品有很多附加功能

时间:2019-12-08 12:24:41

标签: laravel eloquent

模型是项目,额外和订单。

每个订单都有很多项目,所以它是多对多关系,而order->项目有很多额外功能,所以它是多对多关系。

我有一个用于order_items(id,order_id,item_id)的数据透视表,以将商品与订单相关联,但是我该如何将该商品与许多其他商品相关联,所有这些商品都是很多对很多

2 个答案:

答案 0 :(得分:0)

  

每个订单都有很多商品,所以它是多对多关系

这是不正确的思维方式,如果每个订单有很多项目,而任何项目有很多订单,那就是多对多关系,否则就是一对多关系。对于任何多对多关系,您都需要数据透视表,例如说订单和物料具有多对多关系,如下所示:

在app / Order.php中

public function items()
{
    return $this->belongsToMany('App\Item');
}

答案 1 :(得分:0)

您可以根据需要为数据透视表创建模型,该模型为 OrderItem 然后只需重复您对 Order Item 模型所做的操作,并为 Item Extra 创建另一个枢轴。

数据库架构:

orders
id - integer
title - string
body - text

items
id - integer
title - string


order_items
id - integer
order_id - integer
item_id - integer

extras
id - integer
title - string

order_item_extras
id - integer
order_item_id - integer
extra_id - integer

订单模型:

public function items()
{
    return $this->hasMany('App\OrderItem');
}

项目模型:

public function orders()
{
    return $this->hasMany('App\OrderItem');
}

OrderItem模型:

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

public function extras()
{
    return $this->belongsToMany('App\Extra');
}

附加型号:

public function items()
{
    return $this->belongsToMany('App\OrderItem');
}