【发布时间】:2017-11-24 10:53:21
【问题描述】:
我有以下型号:
AuthorModel.hasMany(BookModel);
BookModel.belongsTo(AuthorModel);
有些作者没有书。
我想选择一个作者,他的一本书的名字或标题与搜索字符串匹配。
我可以通过以下语句实现这一点,但仅适用于在 BookModel 中有书籍的作者
Author.findOne({
include: [{
model: Book,
where: {
[Op.or]: [
{'$author.name$': 'search string'},
{ title: 'search string'}
]
},
}]
})
这或多或少给了我以下mysql 查询:
SELECT
`author`.`name`,
`book`.`title`
FROM `author` INNER JOIN `book`
ON `author`.`id` = `book`.`authorId`
AND ( `author`.`name` = 'search string' OR `book`.`title` = 'search string');
这里的问题是,如果作者没有书,那么结果是空的。即使有符合搜索条件的作者。
我尝试将包含设置为required: false,它给出了left outer join。在这种情况下,我会得到一些不匹配的结果。 where 子句被省略。
如何更改我的sequelize 查询,或者正确的mysql 查询是什么?
【问题讨论】:
标签: mysql sequelize.js