我试图确定使用Bookshelf.js表示以下内容的最佳方式:
我有一个Appointment
模型,每个Appointment
都有:
Pet
(s)Service
(s)我可以使用Bookshelf中的多对多关系轻松表示这一点,从而生成三个表:appointment
,appointment_pet
和appointment_service
。
我现在有一项新要求,要求能够在每次约会的基础上指定与每个Service
相关联的Pet
个,以便与特定宠物相关的服务可能很容易找到。例如:
约会1
walk
,water plants
)walk
服务相关联。获取与Pet
相关联的Appointment 1
的所有服务都会返回walk
。
是否有使用Bookshelf表示此方案的最佳方式?
答案 0 :(得分:0)
我认为任何Pet
始终与Service
相关联。在这种情况下,我会将其结构如下:
同样,Service
模型作为Appointment
和Pet
之间的桥梁。 Service
可以有宠物(例如,当它walk
}时(例如,当它water plants
时)。 BookshelfJS模型看起来像:
var Appointment = bookshelf.Model.extend({
services: function () {
return this.hasMany('Service');
},
pets: function () {
return this.hasMany('Pet').through('Service');
},
});
可能的问题是,您最终会得到许多相同类型的Service
个Appointment
,但Pet
和Service
的组合不同。如果Service
上的属性不多,这不会有问题。例如,如果type
只有Service
属性。
如果您要向price
添加更多属性,例如time_duration
,Service
等,您可以在自己的表中提取它,如下所示:
然后price
表将包含每种类型的服务及其属性(例如time_duration
,var Appointment = bookshelf.Model.extend({
services: function () {
return this.hasMany('Service').through('AppointmentService');
},
pets: function () {
return this.hasMany('Pet').through('AppointmentService');
},
});
,...)。代码看起来像:
{{1}}
我建议选择更简单的情况,然后根据需要改变它。您还可能需要使用withPivot方法从关系表中获取值。