Sails + sails-orientdb一对多和一对一关联

时间:2015-08-11 13:27:09

标签: sails.js graph-databases waterline sails-orientdb

我对Sails很新,并且在将我的模型关联映射到OrientDB时遇到了困难。

我有3个型号:

//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中的边缘)一个或多个GPS设备。 这是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'
}
}
};

第三个模型是Credentials,它存储用户凭据并通过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",不返回任何内容。

我错过了什么?如果你能解释使用"来自"我将非常感激。因为我无法从文档中收集太多信息。 非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

在GPSDevice.js中,您缺少型号名称:

user: {
  model: 'user',
  via: 'devices'
}

你在USer.js中不需要dominant: true因为这只适用于多对多关联。

您可以在waterline docs - associations中了解有关一对多关联的更多信息。

此外,它可能不会导致您的问题,但模型/集合名称是小写的,因此collection: 'GPSDevice'应为collection: 'gpsdevice'