// model Users.js
这是用户模型:
module.exports = {
autoCreatedAt: false,
autoUpdatedAt: false,
tableName : 'users',
attributes: {
user_id: {
type: "string",
primaryKey: true
},
name : {
type : 'varchar'
},
register_items : {
collection : 'register',
via : 'business_owner_id',
dominant : true
}
}
};
// model Register.js
that is register model
module.exports = {
autoCreatedAt: false,
autoUpdatedAt: false,
tableName: 'register_items',
attributes: {
register_id: {
type: "integer",
primaryKey: true
},
business_owner_id: {
model: 'users'
}
}
};
// Controller
module.exports = {
getUser : (req,res) => {
Users.find().populate('register_items')
.then(users => {
res.json({status : 200, data : users});
}).catch(err => {
res.json({status : 500, message : 'Error ' + err});
});
}
};
答案 0 :(得分:1)
Users.findOne(USER_ID).populate( 'register_items')
答案 1 :(得分:1)
Sails Waterline在SQL和NOSQL数据库之上工作 - 这意味着模仿内部联接的功能可能无法以您在SQL中习惯的方式进行。
正如@Crusader在他们的回答中指出的那样,你设置模型的方式为你提供了一个很好的单行程序,用于获取已加user
项的register
:
Users.findOne(user_id).populate('register_items').exec(function(err, user) {
// handle errors and empty results...
console.log(user.register_items); // will be full objects
});
但看起来您已经在问题中使用了类似的代码。
由于该代码也必须在NOSQL之上工作,因此无法保证数据库正在完成内部联接。它可能只是两个问题(一个接一个)在引擎盖下:
对于多对多的关系来说会更糟糕!
底线是,如果您使用的是水线,那么 - 就像您使用mongo或任何NOSQL一样 - 涉及多个模型的逻辑可能由您的应用程序(您的代码或水线库)完成,而不是由您的数据库完成,您应该相应地规划您的数据存储。