Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 数据库:订单和项目之间的关系_Mysql_Database_Laravel_Eloquent - Fatal编程技术网

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表中时,它肯定是一种多对多关系

模式可以如下所示-

命令

  • 身份证

  • 名字

项目

  • 身份证

  • 名字

支点

  • 订单号

  • 项目编号

  • 数量


正如您可能知道的,多对多关系可以通过使用透视表来实现

只有将项目数量作为值存储在Pivot表中时,它肯定是一种多对多关系

模式可以如下所示-

命令

  • 身份证

  • 名字

项目

  • 身份证

  • 名字

支点

  • 订单号

  • 项目编号

  • 数量


我所做的是将其作为订单->订单项目->项目。一个订单可以有多个订单项目,每个订单项目都属于一个项目

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 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实际上是一个桥实体。