一篇文章解释道:
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 | |
+------------+---------------+------+-----+-------------------+----------------+
答案 0 :(得分:2)
我所做的是将其视为订单 - > order_items - >项目。订单可以包含许多订单商品,每个订单商品都属于商品。
tabe结构应该是
orders
order_items
items
在代码中你可以做这样的事情
应用/订单强>
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
量