Laravel Mysql:数据透视表还是单独的模型?

时间:2016-12-06 11:56:55

标签: mysql laravel

我有这个mysql数据库,其中有两个表:orders& products

+-------------+
|orders       |
+-------------+
|id           |
|address      |
+-------------+

+-------------+
|products     |
+-------------+
|id           |
|price        |
|qty          |
+-------------+

每个Order都有多个items Product。我知道存储此order_item数据的两个选项。

1。 OrderItem模型

使用此方法,我将创建一个名为OrderItem的新的雄辩模型和一个名为order_items的表。并在OrderOrderItem模型中创建关系。

+-------------+
|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');
}

2。数据透视表

创建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专家的意见。谢谢你的帮助。

2 个答案:

答案 0 :(得分:3)

我创建了一个单独的OrderItem模型,并在购买时存储商品的名称和价格。

数据透视表方法的缺点是,如果相关产品更新甚至删除,您最终会遇到数据完整性问题。

答案 1 :(得分:-1)

数据透视表(或许多ToMany)的主要目的是解决这样的问题。

使用数据透视表,您甚至不需要为此创建单独的模型。

我建议您使用数据透视表。这是Laravel的“正确方法”。