我创建了一个SQL命令行来选择我想要的数据,但找不到用Sequelize进行处理的方法。
我有两个桌子。一个带有一些ID链接到名称,另一个带有长文本。 我想从名称的ID中选择所有包含名称的文本。
此SQL命令正在运行:
SELECT
texts.id,
texts.content
FROM
text
INNER JOIN users AS u ON u.id=38
WHERE
LOWER(texts.content) like concat('%',u.name,'%')
当我尝试使用Sequelize进行操作时,我会遇到类似这样的事情:
this.modelTexts.findAll({
include: [
{
model: this.modelUsers,
where: { id: 38 },
}
],
where: ...
})
尝试此操作时,出现以下错误消息:
SequelizeEagerLoadingError:用户未与文本关联!
我知道我必须做出类似的事情:
Users.hasMany(Texts)
但是我找不到方法。
感谢您抽出宝贵的时间来处理此请求!
答案 0 :(得分:0)
您可以为此使用Sequelize Raw,因此您的查询可以是这样的
sequelize.query(`
SELECT
texts.id,
texts.content
FROM
text
INNER JOIN users AS u ON u.id=38
WHERE
LOWER(texts.content) like concat('%',u.name,'%')`
{ type: sequelize.QueryTypes.SELECT});
或者您可以添加关联。因此,无论您在代码中定义模型的何处,都应添加以下代码
User.hasMany('Text', {foreignKey: 'user_id'});
答案 1 :(得分:0)
虽然以上答案很不错,但我认为这可能会破坏使用续集的全部目的。您是否尝试过以下方法:
在您的文本模型定义中:
df.B.update(df[df.A!='endDate']['B'] // 1000)
在用户模型定义中:
Text.associate = models => {
Text.belongsTo(models.User)
}
让我知道您是否仍然遇到麻烦!从长远来看,了解序列化的工作原理将为您节省许多时间! :)