javascript - Sequelize - 嵌套在相互覆盖的地方

标签 javascript sequelize.js

考虑此请求(针对 Postgres)

var customers = await database.Customer.findAll({
    attributes: [ 'idcustomer', 'firstname', 'lastname' ],
    include: [
        { 
             model: database.Telephone, as: "Telephones", 
             attributes: [ 'number' ], 
             where: { number: { [database.sequelize.Op.eq]: req.body.telephone } } 
        }
    ],
    where: { [database.sequelize.Op.or]: [
        { firstname: { [database.sequelize.Op.iLike]: req.body.firstname} },
        { lastname: { [database.sequelize.Op.iLike]: req.body.lastname} },
        { email: { [database.sequelize.Op.iLike]: req.body.email } }
    ] }
});

我想要实现的是按名字和姓氏/电子邮件/电话号码查询客户,我们称它们为 F、L、E 和 T。此查询基本上选择 T & (F | L | E) 的所有用户,但是,我想要达到的是 (F | L | E | T)。

代码过滤器中参数的底部在前面加上“Customer”。到参数,因此不可能将数字与其余比较进行分组。有解决方法吗?

生成的 SQL:

SELECT 
   "Customer"."idcustomer", "Customer"."firstname", "Customer"."lastname",
   "Telephones"."number" AS "Telephones.number"
FROM "Customer" AS "Customer"
INNER JOIN "Telephone" AS "Telephones" 
    ON "Customer"."idcustomer" = "Telephones"."customer" AND "Telephones"."number" = ''
WHERE
   ("Customer"."firstname" ILIKE '' OR "Customer"."lastname" ILIKE '' OR "Customer"."email" ILIKE '');

最佳答案

您可以使用 Sequelize.col() 来引用包含的行:

var customers = await database.Customer.findAll({
    attributes: [ 'idcustomer', 'firstname', 'lastname' ],
    include: [
        { 
            model: database.Telephone, 
            as: "Telephones", 
            attributes: [ 'number' ]
        }
    ],
    where: { [database.sequelize.Op.or]: [
        {
          telephone: Sequelize.where(Sequelize.col(`"Telephones".number`), {
            [database.sequelize.Op.eq]: req.body.telephone
          })
        },
        { firstname: { [database.sequelize.Op.iLike]: req.body.firstname} },
        { lastname: { [database.sequelize.Op.iLike]: req.body.lastname} },
        { email: { [database.sequelize.Op.iLike]: req.body.email } }
    ] }
});

关于javascript - Sequelize - 嵌套在相互覆盖的地方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51406425/

相关文章:

javascript - Angular2 测试表 : submit method not called

javascript - 遍历所有输入框并清理它们

javascript - where 子句上的意外标记 ' : '

javascript - addAssociation 上的 promise 是用旧版本的源解决的

node.js - sequelize.js belongsTo not null 不起作用

javascript - 无法加载属于我的数据表中 Id 的数据

javascript - 基于溢出链接的图像变量

Javascript 正则表达式匹配由空格分隔但不包含点的字符串

javascript - 解析Json数组推送javascript

node.js - 如何编写测试来测试 Controller 和 api,以便我可以在不依赖数据库的情况下运行 PR 检查?