首页 > 解决方案 > 不能按字段从包含过滤

问题描述

我在尝试在 sequelize 中执行 findAll 方法并使用“include”选项进行一些内部连接并过滤我包含的表的字段时遇到了一些问题。

我试图在包含的对象中添加一个 where 选项,认为它会像普通的 where 子句一样工作,但是它将子句添加到内部连接

这是模拟我的表格的代码

CREATE TABLE IF NOT EXISTS TABLE_B(
    id INTEGER NOT NULL PRIMARY KEY,
    name VARCHAR(100) NOT NULL
);

CREATE TABLE IF NOT EXISTS TABLE_A(
    id INTEGER NOT NULL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    bId INTEGER NOT NULL,
    FOREIGN KEY (bId) REFERENCES TABLE_B (id)
);

这是 sequelize 方法及其执行的基本查询的示例

import Sequelize from 'sequelize';

const Op = Sequelize.Op;

function randomMethod(keyWord) {
    return table_a.findAll({
        where: {
            name: {
                [Op.or]: [{ [Op.like]: '%' + keyWord + '%' }, null],
            }
        },
        include: [{
            model: table_b,
            required: true,
            as: "table_b",
        }]
    })
}

它基本上执行这样的查询:

SELECT 
    * 
FROM table_a 
    INNER JOIN table_b 
        ON table_a.bId = table_b.id 
WHERE 
    table_a.name like '%'|| KeyWord ||'%' OR table_a = NULL;

这是我在 sequelize 上尝试执行的查询示例

SELECT 
    * 
FROM table_a 
    INNER JOIN table_b 
        ON table_a.bId = table_b.id 
WHERE 
    (table_a.name like '%'|| KeyWord ||'%' OR table_a = NULL)
        OR
    table_b.name like '%'|| KeyWord ||'%';

但我似乎找不到用 sequelize 来做这件事的方法,而且我没有找到任何有类似问题的人。有谁能够帮我?

标签: mysqlnode.jssequelize.js

解决方案


推荐阅读