我有一对表(MySQL,如果你好奇的话),其中一个是主表,一个是辅助表,其PK是第一个的FK-它们共享一对一的关系。
我已经充分定义了这两个表,但是当我尝试定义主表的模型以引用辅助表时,我遇到了麻烦。具体来说,所有执行/this/的尝试都失败了:
/* 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 是一个带有数据库字段且未正确重命名属性的奇怪数组。排除列名称会导致查询失败,因为 moreData 不在主表的字段列表中。
我的做法不正确吗?
理解不正确,请告诉我。似乎您拥有的是两个模型,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'
}
}
}
这将在两个数据模型之间建立一对一的关系。
请注意,水线中的一对一关系当前不会在两个表中自动更新。
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
},
}
}
希望我正确理解了您的问题,并且这有所帮助。