如何在表中实例化与正在创建的表之一的记录相关联的表?

  • 本文关键字:记录 关联 实例化 创建 sequelize.js
  • 更新时间 :
  • 英文 :


我有两个表,其中一个存储用户,另一个存储他们在拍卖中给出的启动。下面发送表的代码:

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

我可以使用简单的模型创建记录。创建如下:

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

但是我不能异步创建一个出价,因为用户实例是首先在网站上创建的。当尝试为用户创建出价时"詹姆斯";我尝试了以下操作:

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

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

方法1

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
})

Method2

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"
})
}

最新更新