我应该如何在sails.js中存储多对多关系的属性?

时间:2016-04-25 21:50:07

标签: javascript mysql node.js sails.js waterline

我目前在我的sails项目中创建了以下表格,我有一个名为&#34的表格;用户"和一张名为"出席的表#34;这些表存储在MySQL数据库中。 每个用户都可以参加许多出席,每次出席都可以有很多用户。

使用以下代码实现:

出勤模式:

attributes: {

    attendees: {
        collection: 'user',
        via: 'attendancelist',
        dominant: true
}

用户模型:

attributes{

    attendancelist: {
       collection: 'attendance',
       via: 'attendees'
    }
}

这将创建一个名为:attendence_attendees__user_attendancelist

的表

现在我希望商店有"状态"每个用户。状态将是一个bool,描述出席的用户是否存在。

我想将每个用户的状态存储在" 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);
                    });

            });
        })
}   

上述控制器方法用于与自动生成的关联表完美配合,但使用自定义控制器方法时,它不再将用户和列表添加到表中。

1 个答案:

答案 0 :(得分:0)

不确定我是否完全关注,但是如果你有多对多的关系,那么你需要一个将两个表连接在一起的关联表,并且该表中的主键是来自两个主键的复合键。 BF_KEY key = {{0}}; BF_set_key(&key, 16, key_data); const int block_size = 8; unsigned char previous[block_size] = {0}, decrypted[block_size] = {0}; for (auto it = replay_data.begin(); it != replay_data.end(); it += block_size) { BF_ecb_encrypt(reinterpret_cast<unsigned char*>(&(*it)), decrypted, &key, BF_DECRYPT); std::transform(previous, previous + block_size, decrypted, decrypted, std::bit_xor<unsigned char>()); std::copy_n(decrypted, block_size, previous); std::copy_n(decrypted, block_size, reinterpret_cast<unsigned char*>(&(*it))); } User个表格。也许您可以将您的状态存储在该关联表中。

这是否有意义和/或有帮助?