【问题标题】:Unknown column 'Model1->Model2.fieldname' in 'on clause'“on 子句”中的未知列“Model1->Model2.fieldname”
【发布时间】:2018-06-13 20:49:04
【问题描述】:

我在这个错误未知列错误中苦苦挣扎。

我有3张桌子,下面是

  1. 市场 --- 一对多关系(市场有很多产品。)
  2. 产品 --- 一对一关系(产品属于市场)
  3. 国家 -- 一对多关系(国家有很多产品。)

下面给出的示例 JSON:

[{
    "id": 1,
    "name": "XYZ Name",
    "code": "XYZCODE",
    "Products": [
        {
            "id": 150,
            "product_name": "ABC",
            "product_location": 19,
            "state_id": 24,
            "city": "California",
            "Country": {
                "id": 19,
                "name": "USA"
            }
        },
        {
            "id": 154,
            "product_name": "DEF",
            "product_location": 19,
            "state_id": 24,
            "city": "New York",
            "Country": {
                "id": 19,
                "name": "USA"
            }
        }
    ]
}]

如果在 Country 表中查询城市和国家名称,在 sequelize 中出现以下错误

{
"code": "ER_BAD_FIELD_ERROR",
"errno": 1054,
"sqlState": "42S22",
"sqlMessage": "Unknown column 'Products->Country.name' in 'on clause'",
"sql": "SELECT `MarketplaceType`.`id`, `MarketplaceType`.`name`, `MarketplaceType`.`code`, `Products`.`id` AS `Products.id`, `Products`.`product_name` AS `Products.product_name`, `Products`.`product_location` AS `Products.product_location`, `Products`.`state_id` AS `Products.state_id`, `Products`.`city` AS `Products.city`, `Products->Country`.`id` AS `Products.Country.id`, `Products->Country`.`name` AS `Products.Country.name` FROM `marketplace_type` AS `MarketplaceType` LEFT OUTER JOIN `product` AS `Products` ON `MarketplaceType`.`id` = `Products`.`marketplace_type_id` AND `Products`.`status` = 1 AND `Products`.`marketplace_id` = 1 AND (`Products`.`city` = 'California' OR `Products->Country`.`name` = 'California') LEFT OUTER JOIN `country` AS `Products->Country` ON `Products`.`product_location` = `Products->Country`.`id` WHERE `MarketplaceType`.`status` = 1 AND `MarketplaceType`.`marketplace_id` = 1;"
}

AND MYSQL 查询如下:

SELECT `MarketplaceType`.`id`, `MarketplaceType`.`name`, `MarketplaceType`.`code`, `Products`.`id` AS `Products.id`, `Products`.`product_name` AS `Products.product_name`, `Products`.`product_location` AS `Products.product_location`, `Products`.`state_id` AS `Products.state_id`, `Products`.`city` AS `Products.city`, `Products->Country`.`id` AS `Products.Country.id`, `Products->Country`.`name` AS `Products.Country.name` FROM `marketplace_type` AS `MarketplaceType` LEFT OUTER JOIN `product` AS `Products` ON `MarketplaceType`.`id` = `Products`.`marketplace_type_id` AND `Products`.`status` = 1 AND `Products`.`marketplace_id` = 1 AND (`Products`.`city` = 'California' OR `Products->Country`.`name` = 'California') LEFT OUTER JOIN `country` AS `Products->Country` ON `Products`.`product_location` = `Products->Country`.`id` WHERE `MarketplaceType`.`status` = 1 AND `MarketplaceType`.`marketplace_id` = 1;

使用 sequelize 的 ORM 查询:

var marketplaceTypeQueryObj = {};
var productCountQueryParames = {};

marketplaceTypeQueryObj['status'] = status["ACTIVE"];
marketplaceTypeQueryObj['marketplace_id'] = marketplace['WHOLESALE'];

productCountQueryParames['status'] = status["ACTIVE"];
productCountQueryParames['marketplace_id'] = marketplace['WHOLESALE'];

if (req.query.origin) {
    productCountQueryParames['$or'] = [{
        city: req.query.origin
    }, {
        '$Products.Country.name$': req.query.origin
    }, {
        '$Products.State.name$': req.query.origin
    }];
}

console.log('productCountQueryParames', productCountQueryParames);

model['MarketplaceType'].findAll({
    where: marketplaceTypeQueryObj,
    include: [{
        model: model['Product'],
        where: productCountQueryParames,
        include: [{
            model: model['Country'],
            attributes: ['id', 'name']
        }, {
            model: model['State'],
            attributes: ['id', 'name']
        }],
        attributes: ['id', 'product_name', 'product_location', 'state_id', 'city'],
        required: false
    }],
    attributes: ['id', 'name', 'code']
})

【问题讨论】:

  • 你使用的是ORM查询还是RAW查询?
  • @Priyank 我正在使用 ORM 查询。
  • 请同时发布您的 ORM 查询
  • @VivekDoshi 也更新了 ORM

标签: mysql sequelize.js


【解决方案1】:

改变

attributes: ['id', 'product_name', 'product_location', 'state_id', 'city'],

attributes: ['id', 'product_name', 'product_location', 'state_id', 'city','country_id'],

在您的产品型号属性中添加国家/地区 ID

【讨论】:

    猜你喜欢
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-20
    • 2012-12-23
    相关资源
    最近更新 更多