首页 > 解决方案 > 如何在与首先创建的一个表中的记录关联的表中实例化?

问题描述

我有两张桌子,一张存储用户,另一张存储他们在拍卖中给出的发布。在表格代码的发送下方:

 const dadosusers = conecao.define('usuarios', {


nomecompleto: {
    type: sequelize.STRING,
    
},
nomeusuario: {
    type: sequelize.STRING
},
senha: {
    type: sequelize.STRING
},
datanascimento: {
    type: sequelize.DATE
},
rg: {
    type: sequelize.STRING
},
cpf: {
    type: sequelize.STRING
},
sexo:{
    type: sequelize.STRING
},
telefone: {
    type: sequelize.STRING
},
email: {
    type: sequelize.STRING,
    allowNull: false,
    unique: true
},
emailrecuperacao: {
    type: sequelize.STRING
},
estado: {
    type: sequelize.STRING
},
cep: {
    type: sequelize.STRING
},
cidade: {
    type: sequelize.STRING
},
logradouro: {
    type: sequelize.STRING
},
numerocasa: {
    type: sequelize.INTEGER
},
complemento: {
    type: sequelize.STRING
},
statuscadastro: {
    type: sequelize.STRING
}

});





dadosusers.sync({force: 'true'});

module.exports = dadosusers
E a tabela onde ficara os lance é:

const dadoslances = conecao.define("dadoslances", {


lance: {
    type: Sequelize.STRING,
    unique: true
}, 
 
ofertante: {
    type: Sequelize.STRING
},
ncurtidas: {
    type: Sequelize.INTEGER
},
statuslance: {
    type: Sequelize.STRING
},
modalrel: {
    type: Sequelize.STRING
},
datacriacao: {
    type: Sequelize.DATE
}
});

dadosuser.hasMany(dadoslances, {foreignKey: "lanceId"} );

dadoslances.sync({force: 'true'})

module.exports = dadoslances

我可以使用简单的 Model.create 创建记录,例如:

usuarios.create({
nomecompleto: "James Silver",
email: "james@gmail.com
})

但我无法异步创建出价,因为用户实例是首先在网站上创建的。在尝试为用户“james”创建出价时,我尝试了以下操作:

const id = usuarios.findAll({
attributes: ["id"],
where: {
email: "james@gmail.com"
}).then(function(res){
return res
})

dadoslances.create({
lanceId: id,
lance: "$ 500.00"
})

但是我尝试的结果将“lanceId”列返回为 Null。这里的想法是用户将首先在平台上注册,然后每个用户都可以出价购买对象,这就是为什么出价不会与用户同时实例化的原因。如果有人可以帮助我,我的问题是如何在关联表中异步创建实例。

标签: sequelize.js

解决方案


方法一

usuarios.findOne({ // you can use findOne instead of findAll: if email is primary key
    attributes: ["id"],
    where: {
        email: "james@gmail.com"
    }
}).then(function (res) {
    // 'res' is the usuarios record
    dadoslances.create({
        lanceId: res.id,
        lance: "$ 500.00"
    })
    return res
})

方法2

const usuariosList = await usuarios.findAll({ // we need use await to use 'idList'
    attributes: ["id"],
    where: {
        email: "james@gmail.com"
    }
}); //No need ".then( ... )"

if(usuariosList.length > 0) { // findAll return list, so, must use `[0]`
    dadoslances.create({
        lanceId: usuariosList[0].id, 
        lance: "$ 500.00"
    })
}

推荐阅读