在父表和子表上续集 'where'
Sequelize 'where' on parent and child tables
我需要通过 sequelize(使用 mysql)在两个 table 中(父项和子项)进行查询。
问题在于,当我在父 table 上使用 where 子句时,它会丢弃子 table 上的结果。
在 SQL 中,我需要类似的东西
SELECT *
FROM PARENT
INNER JOIN CHILD
ON PARENT.ID = CHILD.PARENTID
WHERE PARENT.FIELD LIKE 'A'
OR CHILD.FIELD LIKE 'A'
相反,sequelize 总是 returns 类似
SELECT *
FROM PARENT
INNER JOIN CHILD
ON PARENT.ID = CHILD.PARENTID
AND (CHILD.deletedAt IS NULL AND (CHILD.FIELD LIKE 'A'))
WHERE (PARENT.deletedAt IS NULL AND (PARENT.FIELD LIKE 'A'))
我检查了数据,子查询带来了结果,但由于父查询中的 where 语句,它丢弃了子结果
更新
我的代码是这样的:
var childTable = {model:child.model,where.$or:{childField:{$like:'A'}}};
queryOptions = {};
queryOptions.include = [chilldTable];
queryOptions.where = {$or:{parentField:{$like:'A'}}}
Parent.findAll(queryOptions).then(res.send.bind(res))
.catch(errorHandler(res, next));
现在有人知道为什么会这样吗?
谢谢!
嗯,仅供参考,我在此页面中找到的答案:
https://www.bountysource.com/issues/8468317-querying-on-where-association
在阅读了很多论坛和帖子后,结果是如果我在字段前后设置了“$”错字,这会使查询工作...它会是这样的:
var childTable = {model:child.model};
queryOptions = {};
queryOptions.include = [chilldTable];
queryOptions.where = {$or:{parentField:{$like:'A'}, '$childTable.field$':{$like:'A'}}
Parent.findAll(queryOptions).then(res.send.bind(res))
.catch(errorHandler(res, next));
我需要通过 sequelize(使用 mysql)在两个 table 中(父项和子项)进行查询。
问题在于,当我在父 table 上使用 where 子句时,它会丢弃子 table 上的结果。
在 SQL 中,我需要类似的东西
SELECT *
FROM PARENT
INNER JOIN CHILD
ON PARENT.ID = CHILD.PARENTID
WHERE PARENT.FIELD LIKE 'A'
OR CHILD.FIELD LIKE 'A'
相反,sequelize 总是 returns 类似
SELECT *
FROM PARENT
INNER JOIN CHILD
ON PARENT.ID = CHILD.PARENTID
AND (CHILD.deletedAt IS NULL AND (CHILD.FIELD LIKE 'A'))
WHERE (PARENT.deletedAt IS NULL AND (PARENT.FIELD LIKE 'A'))
我检查了数据,子查询带来了结果,但由于父查询中的 where 语句,它丢弃了子结果
更新
我的代码是这样的:
var childTable = {model:child.model,where.$or:{childField:{$like:'A'}}};
queryOptions = {};
queryOptions.include = [chilldTable];
queryOptions.where = {$or:{parentField:{$like:'A'}}}
Parent.findAll(queryOptions).then(res.send.bind(res))
.catch(errorHandler(res, next));
现在有人知道为什么会这样吗?
谢谢!
嗯,仅供参考,我在此页面中找到的答案:
https://www.bountysource.com/issues/8468317-querying-on-where-association
在阅读了很多论坛和帖子后,结果是如果我在字段前后设置了“$”错字,这会使查询工作...它会是这样的:
var childTable = {model:child.model};
queryOptions = {};
queryOptions.include = [chilldTable];
queryOptions.where = {$or:{parentField:{$like:'A'}, '$childTable.field$':{$like:'A'}}
Parent.findAll(queryOptions).then(res.send.bind(res))
.catch(errorHandler(res, next));