sequelize.js - 如何在与首先创建的表之一中的记录关联的表中实例化?

标签 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
我可以使用简单的 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。这里的想法是,用户将首先在平台上注册,然后每个用户都可以出价购买一个对象,这就是为什么出价不会与用户同时实例化的原因。我的问题是如何在关联表中异步创建实例,如果有人可以帮助我。

最佳答案

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

关于sequelize.js - 如何在与首先创建的表之一中的记录关联的表中实例化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66567307/

相关文章:

node.js - 给定 sql server 查询的等效 Sequelize 操作

Node.js 连接到 Squelize

node.js - 具有自定义 ON 条件的左外连接 Sequelize

Node.js + Sequelize + SQL Server

postgresql - 奇怪的 now() 与 Postgres 触发器的时差

mysql - Sequelize paranoid true 会影响查询性能吗?

node.js - Sequelize - 使用自定义获取所有数据

javascript - 使用连接表续写 self 关系

node.js - 使用不是 Sequelize.Model 子类的东西调用的 Sequelize 关联

mysql - 在 Sequelize 中未定义 findOne 属性