我对Sails相当陌生,并且在将我的模型关联映射到OrientDB时一直遇到困难。
我有三个模型:
//User.js
module.exports = {
attributes: {
id: {
type: 'string',
primaryKey: true,
columnName: '@rid'
},
name : {
type: 'string',
required: true
},
surname : {
type: 'string',
required: true
},
email : {
type: 'string',
index: 'unique'
},
devices : {
collection: 'GPSDevice',
via: 'user',
dominant: true
}
};
用户模型"跟随"(在OrientDB中的边缘)一个或多个GPSDevice。这是GPSDevice.js的模型
module.exports = {
attributes: {
id: {
type: 'string',
primaryKey: true,
columnName: '@rid'
},
brand: {
type: 'string',
required: true
},
model: {
type: 'string',
required: true
},
label: {
type: 'string',
required: true
},
user: {
via: 'devices'
}
}
};
第三个模型是凭据,它存储用户凭据,并通过LoginsWith边缘链接到User。我还没有抽出时间来映射这部分,因为我对前两个模型有问题。
虽然我可以在控制器中获取用户数据,通过:
User.findOne({'email': email}, function(err, user) {
console.log('user: ' + user.name);
console.log('user: ' + user.devices);
res.view({user: user});
});
行"user.devices"不返回任何东西。
我错过了什么?如果您能解释一下"via"的用法,我将不胜感激,因为我无法从文档中收集到太多信息。非常感谢您的帮助。
在GPSDevice.js中您缺少模型名称:
user: {
model: 'user',
via: 'devices'
}
你不需要在USer.js中使用dominant: true
,因为它只适用于多对多关联。
您可以在waterline文档- associations中阅读更多关于一对多关联的信息。
也,它可能不会导致你的问题,但模型/集合名称是小写的,所以collection: 'GPSDevice'
应该是collection: 'gpsdevice'
。