用OR序列化多表关联查询

时间:2019-08-20 10:38:24

标签: javascript sql-server sequelize.js

我必须在不同的表中找到一个字段,也就是说,我必须检查搜索是否在Customer表的不同字段,Shops表的不同字段以及ContactPerson表的不同字段中

Customer and Persons和Customer Shops表为1-N并已关联

我想找到的是“搜索”变量。

这是我的代码

CustomerPersonsRelation()
CustomerShop()
    var result = await CustomerModel.findAll({
        ...params,
        include: [
            {model : ShopModel},
            {model: ContactPersonModel}
        ]
    })

所有都是进口的,不用担心。 我的参数是这些:

{
        where: {
            $or: [
                {
                    '$Customer.customer_name$': { $like: '%' + search + '%' },
                },
                {
                    '$Customer.customer_fiscal_name$': { $like: '%' + search + '%' },
                },
                {
                    '$Customer.customer_responsable_name$': { $like: '%' + search + '%' },
                },
                {
                    '$Customer.customer_responsable_phone$': { $like: '%' + search + '%' },
                },
                {
                    '$Customer.customer_web$': { $like: '%' + search + '%' },
                },
                {
                    '$Shops.shop_name$': { $like: '%' + search + '%' },
                },
                {
                    '$Shops.shop_phone$': { $like: '%' + search + '%' },
                },
                {
                    '$Shops.shop_mobile$': { $like: '%' + search + '%' },
                },
                {
                    '$ContactPersons.contactp_name$': { $like: '%' + search + '%' },
                },
                {
                    '$ContactPersons.contactp_phone$': { $like: '%' + search + '%' },
                },
                {
                    '$ContactPersons.contactp_mobile$': { $like: '%' + search + '%' },
                }
            ]
        },
        limit: 3
    })
}

但是返回此错误: 错误:SequelizeDatabaseError:无法绑定多部分标识符“ ContactPersons.contactp_mobile”。 (所有相关字段都会出现此错误。)

我能做些什么呢?

1 个答案:

答案 0 :(得分:1)

解决了!

经过大量测试,我发现错误与关联无关,不在OR中,而是在LIMIT之内。

搜索后,我解决了在include中添加duplicating: false的问题。

最终的代码是这样的:

    var result = await CustomerModel.findAll({
        include: [
            {model : ShopModel, require: true, duplicating: false},
            {model: ContactPersonModel, require: true, duplicating: false}
        ],
        ...params,
        raw
    })