数据库:订单和项目之间的关系

时间:2018-03-09 04:04:25

标签: mysql database laravel eloquent

一篇文章解释道:

  

1对许多

     

“一个给定的订单可能包含许多项目。一个给定的项目   只属于一个订单。“

此处,"给定项目"是指一个特定的项目?因为我们可以在库存中拥有多个特定商品的数量。 但我这样想:

  

商品包含多个订单,订单包含多个商品。

所以不是很多关系吗?

以下是我的订单表:

+------------+--------------+------+-----+-------------------+-------+
| Field      | Type         | Null | Key | Default           | Extra |
+------------+--------------+------+-----+-------------------+-------+
| id         | int(11)      | NO   | PRI | NULL              |       |
| customerId | int(11)      | YES  | MUL | NULL              |       |
| itemId     | int(11)      | YES  | MUL | NULL              |       |
| quantity   | int(11)      | NO   |     | NULL              |       |
| date       | timestamp    | NO   |     | CURRENT_TIMESTAMP |       |
+------------+--------------+------+-----+-------------------+-------+

项目表:

    +------------+---------------+------+-----+-------------------+----------------+
| Field      | Type          | Null | Key | Default           | Extra          |
+------------+---------------+------+-----+-------------------+----------------+
| id         | int(11)       | NO   | PRI | NULL              | auto_increment |
| name       | varchar(255)  | NO   |     | NULL              |                |
| price      | decimal(10,2) | NO   |     | NULL              |                |
| stock      | int(11)       | NO   |     | NULL              |                |
| supplierId | int(11)       | YES  | MUL | NULL              |                |
| date       | timestamp     | NO   |     | CURRENT_TIMESTAMP |                |
+------------+---------------+------+-----+-------------------+----------------+

4 个答案:

答案 0 :(得分:2)

我所做的是将其视为订单 - > order_items - >项目。订单可以包含许多订单商品,每个订单商品都属于商品。

tabe结构应该是

orders

  • ID
  • CUSTOMER_ID
  • 日期

order_items

  • ID
  • ORDER_ID
  • ITEM_ID
  • 数量
  • 价格

items

  • id
  • 姓名
  • 价格
  • stock
  • 供应商ID
  • 日期

在代码中你可以做这样的事情

应用/订单

class Order extends Model {

   public function orderItems(){
      $this->hasMany(OrderItem::class);
   }
}

应用\ OrderItem的

class OrderItem extends Model{

    public function order(){
      $this->belongsTo(Order::class);
    }
    public function item(){
      $this->belongsTo(Item::class);
    }
}

应用\档案

class Item extends Model{

    public function orderItems(){
      $this->hasMany(orderItem::class)
    }

}
希望这有帮助!

PS - 遵循table_name_singular_id命名约定作为外键名称,以便laravel eloquent在不传递列名的情况下工作

答案 1 :(得分:1)

数据库中的关系并不多。如果应该使用桥梁关系来完成它。根据您的数据库表显示它仍然显示一对多关系。特定订单可能包含许多项目,因此表格订单应生成其自己的唯一实体。但它也包含item id的外部实体,其中有许多item id。因此,许多表项ID的一个表订单ID。

答案 2 :(得分:1)

假设我有以下物品: -

订单:A和B. 项目:X,Y和Z

现在,订单A可能包含多个项目X的数量,但每个不同的项目x将具有唯一的序列号。

因此,如果订单A有3个数量的商品X,实际上它包含3个不同的商品,名称相同但制造商ID /序列号不同,如

项目X,序列号为1 项目X,序列号为2 序号为3的项目X

它们都与Ordex A相关联,后者具有唯一的序列号。

多对多关系的一个很好的例子是员工和团队中的团队,员工在多个团队中工作。

答案 3 :(得分:1)

您可能知道使用 Pivot 表可以实现多对多关系。

只有当您将项目数量存储为数据透视表格中的值时,它才会是多对多关系

架构可以如下 -

订单

  • ID

  • 名称

项目

  • ID

  • 名称

枢轴

  • 的order_id

  • ITEM_ID