【问题标题】:How should I store attributes in a many to many relation in sails.js?我应该如何在sails.js 中以多对多关系存储属性?
【发布时间】: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


    【解决方案1】:

    不确定我是否完全遵循,但如果您有一个多对多关系,那么您将需要一个关联表将两个表连接在一起,并且该表中的主键是来自两个主键的复合键UserAttendance 表。也许您可以将您的状态存储在该关联表中。

    这有意义和/或有帮助吗?

    【讨论】:

    • 我确实有一个关联表,它是由水线自动生成的。就是上面提到的“attendence_attendees__user_attendancelist”表。我想在此表中添加一列,但我不知道如何在 Sails 中更改此表。
    猜你喜欢
    • 2012-05-25
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 2019-09-10
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    相关资源
    最近更新 更多