【发布时间】:2016-04-25 21:50:07
【问题描述】:
我目前在我的sails 项目中创建了以下表,我有一个名为“Users”的表和一个名为“Attendance”的表。这些表存储在 MySQL 数据库中。 每个用户可以是多个考勤的一部分,每个考勤可以有多个用户。
这是通过以下代码实现的:
考勤模式:
attributes: {
attendees: {
collection: 'user',
via: 'attendancelist',
dominant: true
}
用户模型:
attributes{
attendancelist: {
collection: 'attendance',
via: 'attendees'
}
}
这将创建一个名为:attendence_attendees__user_attendancelist 的表
现在我想存储每个用户的“状态”。状态将是一个布尔值,描述出席的用户是否在场。
我想将每个用户的状态存储在“attendence_attendees__user_attendancelist”表中。
这是可能的还是有更好的方法来存储状态?
我设法创建了一个自定义关联表,但现在sails 不再向关联表添加数据。我使用以下代码:
//Attendance model
attributes: {
attendees: {
collection: 'user',
via: 'attendancelist',
through: 'userattendance'
}
//User model
attributes{
attendancelists: {
collection: 'attendance',
via: 'attendees',
through: 'userattendance'
}
}
//Userattendance model
attributes:{
attendancelist: {
model: 'attendance',
foreignKey: true,
collumnName: 'attendance_id'
},
attendees: {
model: 'user',
foreignKey: true,
collumnName: 'user_id'
},
status: {
type: 'boolean',
defaultsTo: false
}
}
//controller method to add data:
getGroupAttendees: function(req, res){
Group.findOne({id: req.param('groupID')})
.populateAll()
.exec(function getGroup(err, group){
if(err) return res.negotiate(err);
if(!groep) return res.json(401, {err:'group not found'});
var users = [];
group.attendees.forEach(function(user){
users.push(_.pick(user, ['id']));
})
var attendancelistOBJ = {
planning: 1,
attendees: users
}
Attendance.create(attendancelistOBJ, function agendaCreated(err, lijst){
if(err) return res.negotiate(err);
lijst.save(function(err, lst){
if(err) return next(err);
return res.json(attendancelistOBJ.attendees);
});
});
})
}
上述控制器方法过去可以完美地与自动生成的关联表配合使用,但使用自定义关联表时,它不再将用户和列表添加到表中。
【问题讨论】:
标签: javascript mysql node.js sails.js waterline