我有一对表(MySQL,如果你很好奇),这样一个是主表,一个是辅助表,其PK是第一个的FK - 它们共享一对一关系。
我已经充分定义了两个表,但是当我尝试定义主表的模型以引用辅助表时,我遇到了麻烦。具体来说,所有尝试/ this / fail:
/* existing primary key defined, works okay */
id: {
columnName: 'KeyID',
type: 'integer',
primaryKey: 'true',
autoIncrement: 'true'
},
/* adding this ruins everything */
moreData: {
columnName: 'KeyID',
model: 'extraData'
}
运行它会看到ORM / return /但结果很奇怪并且损坏,KeyID是moreData应该是的副本,而moreData是一个带有DB字段的奇怪数组,并且没有正确地重命名属性。排除columnName会导致查询失败,因为moreData不在主表的字段列表中。
我接近这个错误吗?
答案 0 :(得分:0)
如果我没有正确理解这一点,请告诉我。看来你所拥有的是两个模型,PrimaryData和ExtraData,它们应该是一对一的关系。是吗?
如果是这样,我会按如下方式设置:
//PrimaryData.js
module.exports = {
attributes: {
id: {
column: 'KeyID',
type: 'integer',
primaryKey: true,
autoIncrement: true
},
extraData: {
column: 'ExtraKeyID',
model: 'ExtraData'
}
}
}
//ExtraData.js
module.exports = {
attributes: {
id: {
column: 'KeyID',
type: 'integer',
primaryKey: true,
autoIncrement: true
},
primaryData: {
column: 'PrimaryKeyID',
model: 'PrimaryData'
}
}
}
这在两个数据模型之间建立了一对一的关系。
请注意,Waterline中的一对一关系目前未在两个表中自动更新。
https://github.com/balderdashy/waterline/issues/360
因此,根据您的需求,您可以将其更改为一对多关系。
如果ExtraData实际上只是PrimaryData的扩展,并且永远不会在它上面使用,那么一对一可能是要走的路,你甚至不需要指针返回ExtraData模型中的PrimaryData。
//ExtraData.js
module.exports = {
attributes: {
id: {
column: 'KeyID',
type: 'integer',
primaryKey: true,
autoIncrement: true
},
}
}
希望我能正确理解你的问题并且这会有所帮助。