1

我对 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 中的边缘)一个或多个 GPSDevice(s)。这是 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.findOne({'email': email}, function(err, user) {
        console.log('user: ' + user.name);
        console.log('user: ' + user.devices);
        res.view({user: user});
    });

“user.devices”行不返回任何内容。

我错过了什么?如果您能解释“via”的用法,我将不胜感激,因为我无法从文档中收集到太多信息。您的帮助将不胜感激。

4

1 回答 1

1

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

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

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

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

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

于 2015-08-12T17:23:31.980 回答