【问题标题】:sequelize Unknown column '' in 'on clause'在'on子句'中续集未知列''
【发布时间】:2019-07-03 16:01:00
【问题描述】:

我有以下代码,但我遇到了问题。我正在尝试包含images 表...

orderimages 之间已经存在关系,但我不知道为什么它会显示以下错误:

Unhandled rejection SequelizeDatabaseError: ER_BAD_FIELD_ERROR: Unknown column 'images.imageable' in 'on clause'

代码下方:

models.Order.findOne({
    where: {
        id: req.params.orderId
    },
    attributes: ['id', 'comment', 'rating', 'orderDescription', 'userLat', 'userLng', 
                 'orderStatus', 'providerId', 'isUsingBalance', 'userId', 'serviceId', 
                 'createdAt', 'updatedAt', 'ticketNumber', 'orderScheduledDate', 'promoId', 'paymentMethodId',
        [sequelize.Sequelize.fn('date_format', sequelize.Sequelize.col('orderScheduledDate'), '%Y-%m-%D %h:%i'), 'orderScheduledDateToEdit']

    ],
    include: [{
            model: models.Comment,

            include: [{
                model: models.User,
                attributes: ['firstName', 'lastName', 'id']
            }]
        },
        {
            model: models.Provider,
            attributes: ['id', 'userId'],
            include: [{
                    model: models.User,
                    attributes: ['id', 'firstName', 'lastName', 'phoneNumber']
                },
                {
                    model: models.ProviderLocation,
                    attributes: ['lat', 'lng', 'providerId']
                },
                {
                    model: models.PaymentMethod,
                    through: {
                        where: {
                            status: "ACTIVE"
                        }
                    }
                }
            ]
        },
        {
            model: models.User,
            attributes: ['id', 'firstName', 'lastName', 'phoneNumber', 'status'],
            include: [{
                model: models.Balance,
                attributes: ['balance']

            }]
        },
        {
            model: models.notified_providers,
            attributes: ['orderId', 'providerBroadcastedId', 'distance', 'duration', 'status', 'rank_score', 'rate_score', 'distance_score', 'nationality_score', 'total_score'],
            include: [{
                model: models.Provider,
                attributes: ['id'],
                include: [{
                        model: models.User,
                        attributes: ['id', 'firstName', 'lastName', 'phoneNumber', 'status', 'rate', 'rankId']
                    },
                    {
                        model: models.PaymentMethod,
                        through: {
                            where: {
                                status: "ACTIVE"
                            }
                        }
                    }

                ]
            }]
        },
        {
            model: models.rate,
            attributes: ['rate']
        },
        {
            model: models.Service,
            attributes: ['serviceType']
        },
        {
            model: models.Promotion,
            attributes: ['code', 'conditions']
        },
        {
            model: models.PaymentMethod,
            attributes: ['name', 'image']
        },
        {
            model: models.images,
            attributes: ['imageble', 'image', 'imagebleId']
        }
    ]
});

我检查了每个模型内部的关系,很好,没有问题。

这是Order 型号:

Order.hasMany(models.images, {
    foreignKey: 'imagebleId',
    scope: {
        imageable: 'Order'
    }
});

这是Images 模型:

images.belongsTo(models.Order, { foreignKey: "imagebleId" });

【问题讨论】:

  • 您确定该列名对于图像表是可成像的吗??
  • 您是否 a) 查看过您正在访问的表 b) 查看发送到 DB 的原始 SQL?
  • 是的,我检查了表格并且名称是正确的
  • 尝试在images 模型关联定义和包含上添加as 属性。
  • 我在你的问题中找到了答案。谢谢。

标签: mysql node.js sequelize.js sequelize-cli


【解决方案1】:

我尝试了@Ellebkey 解决方案(在上面作为评论发布)

尝试在images 模型关联定义和包含上添加as 属性。

使用 (AS) 就像一个魅力。

【讨论】:

  • as 起作用的原因是因为没有它,Sequelize 将根据默认机制“猜测”列的名称。例如,如果您的模型具有自动生成的ids,它会尝试类似OrderIdImagesId,即基于模型的名称。
猜你喜欢
  • 2011-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-23
  • 2013-01-26
相关资源
最近更新 更多