如何在与首先创建的表之一中的记录关联的表中实例化?
How to instantiate in tables associated with the record in one of the tables being created first?
我有两个表,一个存储用户,另一个存储他们在拍卖中提供的发布。下面发送表格代码:
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"
})
但我尝试的结果returns“lanceId”列为空。这里的想法是,用户将首先在平台上注册,然后每个用户都可以出价购买一个对象,这就是为什么出价不会与用户同时实例化的原因。我的问题是如何在关联表中异步创建实例,如果有人可以帮助我。
方法一
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"
})
}
我有两个表,一个存储用户,另一个存储他们在拍卖中提供的发布。下面发送表格代码:
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"
})
但我尝试的结果returns“lanceId”列为空。这里的想法是,用户将首先在平台上注册,然后每个用户都可以出价购买一个对象,这就是为什么出价不会与用户同时实例化的原因。我的问题是如何在关联表中异步创建实例,如果有人可以帮助我。
方法一
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"
})
}