我有2个模型:Order和Widget。窗口小部件是一个唯一的项目,只能存在于一个订单上。我可以用belongsTo表示这个,即Wiget属于一个Order,Widget将包含一个order_id字段。或者,我可以使用连接表来包含和使用连接表。
由于Widget本身就存在并且稍后与订单关联,因此Widget上的order_id字段保持为空是否“好”?对我来说,似乎“不干净”,而不是在将来的某个时间将联系表与订单相关联。我还需要获取与订单关联的小部件和不包含订单的小部件。
设置此功能的最佳方法是什么?
答案 0 :(得分:1)
我会使用belongsTo,允许外键为null。它可能看起来不干净,但我认为它是HABTM旁边的最佳选择,如果您声明Widget只能存在于一个订单中。只有将一条记录与另一条记录相关联的联接表似乎相当混乱。
如果您需要获取具有Orders的Widgets和不具有Orders的Widgets,只需使用order_id = null进行过滤。或者,如果使用包含行为进行查找,如果Widget的order_id为null,则不会检索该记录。