Mysql 数据库:订单和项目之间的关系
一篇文章解释说: 一对多 “一个给定的订单可能包含多个项目。一个给定的项目 只属于一个订单。” 这里,“给定项”是指一个特定项?因为我们可以有多个数量的特定项目的库存。 但我是这样想的: 一个项目有许多订单,而一个订单包含许多项目 这不是一种多对多的关系吗 以下是我的订单表:Mysql 数据库:订单和项目之间的关系,mysql,database,laravel,eloquent,Mysql,Database,Laravel,Eloquent,一篇文章解释说: 一对多 “一个给定的订单可能包含多个项目。一个给定的项目 只属于一个订单。” 这里,“给定项”是指一个特定项?因为我们可以有多个数量的特定项目的库存。 但我是这样想的: 一个项目有许多订单,而一个订单包含许多项目 这不是一种多对多的关系吗 以下是我的订单表: +------------+--------------+------+-----+-------------------+-------+ | Field | Type | Null | Key
+------------+--------------+------+-----+-------------------+-------+
| 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 | |
+------------+---------------+------+-----+-------------------+----------------+
数据库中没有多对多关系。如果有,则应使用bridges关系。正如数据库表所示,它仍然显示一对多关系。一个特定的订单可能包含许多项,因此表订单应该生成它自己的唯一实体。但它也包含项目id的外部实体,其中有许多项目id。因此,一个表订单id对应多个表项id。数据库中没有多对多关系。如果有,则应使用bridges关系。正如数据库表所示,它仍然显示一对多关系。一个特定的订单可能包含许多项,因此表订单应该生成它自己的唯一实体。但它也包含项目id的外部实体,其中有许多项目id。因此,一个表订单id对应多个表项id。假设我有以下对象:- 订单:A和B 项目:X、Y和Z 现在,订单A可能包含多个数量的项目X,但每个不同的项目X将有一个唯一的序列号 因此,如果订单A有3个数量的项目X,实际上它包含3个不同的项目,名称相同,但制造id/序列号不同,如 序列号为1的项目X 序列号为2的项目X 序列号为3的项目X 它们都与Ordex A相连,Ordex A有一个唯一的序列号
多对多关系的一个很好的例子是组织中的员工和团队,员工作为多个团队的一部分工作。假设我有以下对象:- 订单:A和B 项目:X、Y和Z 现在,订单A可能包含多个数量的项目X,但每个不同的项目X将有一个唯一的序列号 因此,如果订单A有3个数量的项目X,实际上它包含3个不同的项目,名称相同,但制造id/序列号不同,如 序列号为1的项目X 序列号为2的项目X 序列号为3的项目X 它们都与Ordex A相连,Ordex A有一个唯一的序列号
多对多关系的一个很好的例子是组织中的一名员工和一个团队,其中员工作为多个团队的一部分工作。正如您可能知道的那样,多对多关系可以通过使用透视表来实现 只有将项目数量作为值存储在Pivot表中时,它肯定是一种多对多关系 模式可以如下所示- 命令
- 身份证
- 名字
- 身份证
- 名字
- 订单号
- 项目编号
- 数量
- 身份证
- 名字
- 身份证
- 名字
- 订单号
- 项目编号
- 数量
订单
- 身份证
- 客户识别码
- 日期
订购项目
- 身份证
- 订单号
- 项目编号
- 数量
- 价格
项目
- 身份证
- 名字
- 价格
- 股票
- 供应商
- 日期
class Order extends Model {
public function orderItems(){
$this->hasMany(OrderItem::class);
}
}
App\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)
}
}
App\Item
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-遵循表_name _singular _id命名约定作为外键名,以便laravel Elount在不传递列名的情况下工作我所做的是将其作为订单->订单项目->项目。一个订单可以有多个订单项目,每个订单项目都属于一个项目 tabe结构应该是
订单
- 身份证
- 客户识别码
- 日期
订购项目
- 身份证
- 订单号
- 项目编号
- 数量
- 价格
项目
- 身份证
- 名字
- 价格
- 股票
- 供应商
- 日期
class Order extends Model {
public function orderItems(){
$this->hasMany(OrderItem::class);
}
}
App\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)
}
}
App\Item
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-遵循表_name _singular _id命名约定作为外键名,以便laravel在不传递列名的情况下运行可以使用laravel中的数据透视实现多对多关系。@VaishnavMhetre数据透视实际上是一个桥接实体。可以使用laravel中的数据透视实现多对多关系Laravel@VaishnavMhetre pivots实际上是一个桥实体。