我有这个mysql数据库,其中有两个表:orders
& products
。
+-------------+
|orders |
+-------------+
|id |
|address |
+-------------+
+-------------+
|products |
+-------------+
|id |
|price |
|qty |
+-------------+
每个Order
都有多个items
Product
。我知道存储此order_item
数据的两个选项。
使用此方法,我将创建一个名为OrderItem
的新的雄辩模型和一个名为order_items
的表。并在Order
和OrderItem
模型中创建关系。
+-------------+
|order_items |
+-------------+
|product_id |
|order_id |
|price |
|qty |
+-------------+
// inside Order model
public function orderItems() {
return $this->hasMany('App\OrderItem');
}
// inside OrderItem model
public function order() {
return $this->belongsTo('App\Order');
}
创建Order
- Product
多对多关系。
+-------------+
|order_product|
+-------------+
|product_id |
|order_id |
|price |
|qty |
+-------------+
// inside Order model
public function products() {
return $this->belongsToMany('App\Product')->withPivot('price', 'qty');
}
// inside Product model
public function orders() {
return $this->belongsToMany('App\Order')->withPivot('price', 'qty');
}
哪种方法在Laravel及其代码方面更好?我相信这个问题不属于DBA论坛,因为它几乎是一个Laravel问题。寻求Laravel专家的意见。谢谢你的帮助。
答案 0 :(得分:3)
我创建了一个单独的OrderItem
模型,并在购买时存储商品的名称和价格。
数据透视表方法的缺点是,如果相关产品更新甚至删除,您最终会遇到数据完整性问题。
答案 1 :(得分:-1)
数据透视表(或许多ToMany)的主要目的是解决这样的问题。
使用数据透视表,您甚至不需要为此创建单独的模型。
我建议您使用数据透视表。这是Laravel的“正确方法”。