使用sequelize的一对一关系?

时间:2018-04-20 16:08:06

标签: javascript node.js express sequelize.js

    var Friend = sequelize.define('Friend', {
    id: {
        type: DataTypes.INTEGER,
        autoIncrement: true,
        primaryKey: true
    },
    userId_1: {
        type: DataTypes.INTEGER,
        allowNull: false
    },
    userId_2: {
        type: DataTypes.INTEGER,
        allowNull: false
    }

    var User = sequelize.define('User', {
    id: {
        type: DataTypes.INTEGER,
        autoIncrement: true,
        primaryKey: true
    },
    name: {
        type: DataTypes.STRING,
        allowNull: false
    }

我的模型名为Friend,User就像上面那样......

我想要一对一的关联,其中Friend具有每个user_1的名称,user_2与User中的[id]一起

"userId_1": "1",
"userId_2": "2",
"user_1": {
  "name": "User1 Name"
},
"user_2": {
  "name": "User2 Name"
}
像这样,

我如何使用Sequelize

在Node-Express中解决这个问题

2 个答案:

答案 0 :(得分:1)

定义这样的模型:

  BufferedReader reader = new BufferedReader(new FileReader("file.text"));
    int Counter = 1;
    String line;
    while ((line = reader.readLine()) != null) {
        //read the line 
        Scanner scanner = new Scanner(line);
       //now split line using char you want and save it to array
        for (String token : line.split("@")) {
            //add element to array here 
            System.out.println(token);
        }
    }
    reader.close();

var Friend = sequelize.define('Friend', { id: { type: DataTypes.INTEGER, autoIncrement: true, primaryKey: true }, userId_1: { type: DataTypes.INTEGER, allowNull: false }, userId_2: { type: DataTypes.INTEGER, allowNull: false } ); Friend.belongsTo(User, { as : 'user_1' , foreignKey : 'userId_1', constraints: false}); Friend.belongsTo(User, { as: 'user_2', foreignKey : 'userId_2' , constraints:false}); 取决于constraints:falseuser_1是否是疯狂的,如果是,那么您可以删除它,如果没有,请保持原样。

您可以像这样获取两个用户的数据

user_2

答案 1 :(得分:0)

要查询Friend并访问用户的名称,您需要在这两个实体之间创建类型hasOne的关联。

var Friend = sequelize.define('Friend', {
    id: {
        type: DataTypes.INTEGER,
        autoIncrement: true,
        primaryKey: true
    }
    Friend.hasOne(User, { as: 'user_1' }); // this will add the attribute user_1Id to Friend
    Friend.hasOne(User, { as: 'user_2' }); // this will add the attribute user_2Id to Friend
}

然后,您可以使用User

获取Friend.getUser_1()对象

您可以找到有关hasOne关联here的更多信息。