0

我正在玩 Laravel 模型,我遇到了一个相当常见的数据库设计模式,我无法为其建立关系(使用 Laravel)。

这里是Database design

如果我们只考虑下表(为简单起见):
1.Customers 2.Products 3.Product_Prices

产品价格预计会随时间变化,我们需要跟踪)
4.Customer_Orders
5.Customer_Orders_Products (客户可以在一个订单中订购多个产品)

这是我到目前为止所拥有的:
1. Product HAS MANYProduct_Prices
2. Product_Prices BELONGS TOProducts
3. Customer HAS MANYCustomer_Orders
4. Customer_Order BELONGS TOCustomer
5. Customer_Order HAS MANYCustomer_Order_Products
6. Customer_Order_Products BELONGS TOCustomer_Order

我认为Pricefor eachCustomer_Order_Products将通过建立与表的关系来获取Products?我们如何建立这样的关系?

如何获得Laravel Collection Object具有以下详细信息的一个(我不确定是否只Eloquent返回一个集合对象或者它是否与 相同Fluent):
1. CustomerWITH Customer_OrdersWITH Customer_Orders_ProductsWITH Product_Price

另外如何设置约束,例如:
1. CustomerWITH Customer_OrdersWITH Customer_Orders_ProductsWHERE ?Product_PriceProduct_Price < Customers_Order.date_order_placed

谢谢

4

2 回答 2

1

我认为对数据库进行反规范化以将价格包含在 Customer_Order_Products 中,然后使用以下关系会更好。

class CustomerOrder {
    protected $table = 'Customer_Orders';

    ...

    public function products()
    {
        return $this->belongsToMany('Products')->withPivot('quantity','comments', 'price');
    }

    ...
}
于 2013-11-05T21:04:40.277 回答
0

在您的情况下,Customer_Orders_Products 不仅仅是一个花哨的连接表,而是它自己的模型,与 Product_Prices 表有关系。

将 product_price_id 添加到表中以将订购的产品映射到价格。

这增加了灵活性(也许价格是由以后的数量而不是“最近”决定的),而间接成本几乎与直接存储价格相同。

于 2013-11-06T04:15:07.950 回答