[英]Sequelize 'where' on parent and child tables
我需要通過sequelize(使用mysql)在兩個表(父表和子表)中進行查詢。
問題是,當我在父表上使用where子句時,它將丟棄子表上的結果。
用SQL Word我需要類似的東西
SELECT *
FROM PARENT
INNER JOIN CHILD
ON PARENT.ID = CHILD.PARENTID
WHERE PARENT.FIELD LIKE 'A'
OR CHILD.FIELD LIKE 'A'
相反,sequelize總是返回類似
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));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.