Sequelize-Promise.all返回“无法准备的属性'getTableName'未定义”

时间:2018-11-01 12:56:01

标签: javascript mysql node.js sequelize.js

我有三个表:

订单

orderId |价格|数量areaId | customerId

区域

areaId |名称|区域代码

客户

customerId |名称|电邮|移动

我正在使用sequelize作为我的ORM。

我创建了以下关联:

Orders.belongsTo(models.Customers, {
        foreignKey: 'customerId',
        as: 'Customer'
    });

    Orders.belongsTo(models.Area, {
        foreignKey: 'areaId',
        as: 'Area'
    });

我想获取属于特定区域的订单,并对得到的结果进行搜索查询。

我还必须在服务器端实现分页。我现在正在执行两个查询,一个查询获取已应用限制(用于分页)的订单,另一个查询获取记录的总数。

Promise.all([ /*Query 1 to get paginated result*/
            Orders.findAll({
                attributes: ['orderId', 'addressLine1', 'addressLine2', 'Price','Quantities',
                    'areaId', 'customerId'
                ],
                where: {
                    [Op.and]: {
                        areaId: areaId,
                        [Op.or]: {
                            '$Area.name$': {
                                [Op.like]: '%' + searchTerm + '%'
                            },
                            '$Customer.name$': {
                                [Op.like]: '%' + searchTerm + '%'
                            },
                            addressLine1: {
                                [Op.like]: '%' + searchTerm + '%'
                            },
                            addressLine2: {
                                [Op.like]: '%' + searchTerm + '%'
                            }
                        }

                    }
                },
                include: [{
                        model: Area,
                        as: 'Area',
                        attributes: ['name', 'areaId']
                    },
                    {
                        model: Customers,
                        as: 'Customer',
                        attributes: ['name', 'id']
                    }
                ],
                limit,
                offset
            }),
            /*Query 2 to get total number of records*/
            Orders.findAll({
                attributes: ['orderId'],
                where: {
                    [Op.and]: {
                        areaId: areaId,
                        [Op.or]: {
                            '$Area.name$': {
                                [Op.like]: '%' + searchTerm + '%'
                            },
                            '$Customer.name$': {
                                [Op.like]: '%' + searchTerm + '%'
                            },
                            addressLine1: {
                                [Op.like]: '%' + searchTerm + '%'
                            },
                            addressLine2: {
                                [Op.like]: '%' + searchTerm + '%'
                            }
                        }

                    }
                },
                include: [{
                        module: Area,
                        as: 'Area',
                        attributes: ['name', 'areaId']
                    },
                    {
                        module: Customers,
                        as: 'Customer',
                        attributes: ['name', 'customerId']
                    }
                ]
            })
        ])
    })
    .then(orderData => {
        res.json({
            data: orderData[0],
            total: orderData[1].length
        })
    })

在执行上述查询时出现此错误:

  

TypeError:无法读取未定义的属性“ getTableName”       在Function._validateIncludedElement(/home/dell/Desktop/24klen_backend/node_modules/sequelize/lib/model.js:465:30)

注意: 如果只运行第一个查询,我会得到结果。使用Promise.all执行两个查询都会引发上述错误。因此,我的直觉是异步执行两个查询都会导致此问题。

让我知道是否需要进一步说明。谢谢。

0 个答案:

没有答案