帆+面向帆,一对多,一对一关联



我对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'

相关内容

  • 没有找到相关文章

最新更新