gpt4 book ai didi

javascript - Sequelize - hasMany() - setter 将前一行的外键重置为 null

转载 作者:行者123 更新时间:2023-12-03 22:37:44 28 4
gpt4 key购买 nike

我的应用程序的功能之一是根据查询参数检查某人访问链接的位置。

基于此,我有以下代码在 Clicks 表中注册点击;然后我将外键设置为另一个表中的 URL;最后,我将外键设置为也在另一个表( Origins )中的 Origin 。

如果我使用belongsTo而不是hasMany,但使用Clicks和click.setUrl(url)而不是url.setClick(click),一切都正常。

  const urlCode = req.params.urlCode
const org = req.query.org
let err

try {
const url = await Urls.findOne({ where: { urlCode: urlCode } })
const origin = await Origins.findOne({ where: { abbr: org } })

if (url === null) {
res.redirect(`${process.env.WEB_URL}/not-found`)
err = { code: 404, msg: 'URL Not found' }
throw err
}

const click = await Clicks.create()
click.setOrigin(origin)
* url.setClick(click)

res.redirect(url.originalUrl)
} catch (err) {
console.log(err)
res.status(err.code).send(err.msg)
}

问题

这是输出。最后 2 行与上面带有星号的标记行相关。
问题是在第二行,setter 将之前的 id 重置为 NULL。
Executing (default): UPDATE `Clicks` SET `originId`=NULL,`updatedAt`='2019-06-10 11:05:16' WHERE `id` = 5
Executing (default): UPDATE `Clicks` SET `UrlId`=NULL,`updatedAt`='2019-06-10 11:05:16' WHERE `id` IN (4)
Executing (default): UPDATE `Clicks` SET `UrlId`=1,`updatedAt`='2019-06-10 11:05:16' WHERE `id` IN (5)

楷模:
module.exports = (sequelize, DataTypes) => {
const Urls = sequelize.define('Urls', {
originalUrl: {
type: DataTypes.STRING,
allowNull: false
},
shortUrl: { type: DataTypes.STRING },
urlCode: { type: DataTypes.STRING }
})

Urls.associate = function (models) {
Urls.hasMany(models.Clicks, { as: 'click' })
}

return Urls
}
module.exports = (sequelize, DataTypes) => {
const Clicks = sequelize.define('Clicks')

Clicks.associate = function (models) {
Clicks.belongsTo(models.Origins, { as: 'origin' })
}
return Clicks
}
module.exports = (sequelize, DataTypes) => {
const Origins = sequelize.define('Origins', {
origin: {
type: DataTypes.STRING
},
abbr: {
type: DataTypes.STRING
}
})

return Origins
}

最佳答案

解决了问题。

    const click = await Clicks.create()
click.setOrigin(origin)
//- url.setClick(click)
+ url.addClick(click)

res.redirect(url.originalUrl)

关于javascript - Sequelize - hasMany() - setter 将前一行的外键重置为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56525997/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com