Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Sequelise创建了一个奇怪的查询_Javascript_Node.js_Sequelize.js - Fatal编程技术网

Javascript Sequelise创建了一个奇怪的查询

Javascript Sequelise创建了一个奇怪的查询,javascript,node.js,sequelize.js,Javascript,Node.js,Sequelize.js,我有3张表城市、汽车、图像 我需要为城市/parent_id=21获取城市的汽车以及汽车的图像。(使用where子句根据排序号过滤图像) 我的原始查询是: SELECT `car`.`car_id`, `car`.`chassis_no`, `images`.`car_image_id` AS `images.car_image_id`, `images`.`directory` AS `images.directory`, `images`.`file_

我有3张表
城市、汽车、图像

我需要为
城市/parent_id=21
获取城市的汽车以及汽车的图像。(使用where子句根据排序号过滤图像)

我的原始查询是:

SELECT
    `car`.`car_id`,
    `car`.`chassis_no`,
    `images`.`car_image_id` AS `images.car_image_id`,
    `images`.`directory` AS `images.directory`,
    `images`.`file_name` AS `images.file_name`
FROM `car` AS `car`
INNER JOIN `city` AS `city` ON
        `car`.`parent_id` = `city`.`id`
        AND `city`.`parent_id` = 21
INNER JOIN `images` AS `images` ON
    `car`.`car_id` = `images`.`car_id`
    AND `images`.`sort_number` = 1
limit 0, 5;
explain SELECT
    `car` .*,
    `images`.`car_image_id` AS `images.car_image_id`,
    `images`.`directory` AS `images.directory`,
    `images`.`file_name` AS `images.file_name`
FROM
    (
    SELECT
        `car`.`car_id`,
        `car`.`chassis_no`
    FROM
        `car` AS `car`
    INNER JOIN `city` AS `city` ON
        `car`.`parent_id` = `city`.`id`
        AND `city`.`parent_id` = 21
    WHERE
        (
        SELECT
            `car_id`
        FROM
            `images` AS `images`
        WHERE
            (`images`.`sort_number` = 1
            AND `images`.`car_id` = `car`.`car_id`)
        LIMIT 1 ) IS NOT NULL
    LIMIT 0,
    5) AS `car`
INNER JOIN `images` AS `images` ON
    `car`.`car_id` = `images`.`car_id`
    AND `images`.`sort_number` = 1;
Sequelise生成的查询如下:

SELECT
    `car`.`car_id`,
    `car`.`chassis_no`,
    `images`.`car_image_id` AS `images.car_image_id`,
    `images`.`directory` AS `images.directory`,
    `images`.`file_name` AS `images.file_name`
FROM `car` AS `car`
INNER JOIN `city` AS `city` ON
        `car`.`parent_id` = `city`.`id`
        AND `city`.`parent_id` = 21
INNER JOIN `images` AS `images` ON
    `car`.`car_id` = `images`.`car_id`
    AND `images`.`sort_number` = 1
limit 0, 5;
explain SELECT
    `car` .*,
    `images`.`car_image_id` AS `images.car_image_id`,
    `images`.`directory` AS `images.directory`,
    `images`.`file_name` AS `images.file_name`
FROM
    (
    SELECT
        `car`.`car_id`,
        `car`.`chassis_no`
    FROM
        `car` AS `car`
    INNER JOIN `city` AS `city` ON
        `car`.`parent_id` = `city`.`id`
        AND `city`.`parent_id` = 21
    WHERE
        (
        SELECT
            `car_id`
        FROM
            `images` AS `images`
        WHERE
            (`images`.`sort_number` = 1
            AND `images`.`car_id` = `car`.`car_id`)
        LIMIT 1 ) IS NOT NULL
    LIMIT 0,
    5) AS `car`
INNER JOIN `images` AS `images` ON
    `car`.`car_id` = `images`.`car_id`
    AND `images`.`sort_number` = 1;
执行explain显示sequelise查询不是很有效,而且在我看来,它确实看起来很奇怪,而不是平面连接。但这两个查询的结果是相同的

这是我的亲戚:

//Relations
city.hasMany(car, { foreignKey: 'parent_id', sourceKey: 'id' })
car.belongsTo(city, {
  foreignKey: 'parent_id',
  sourceKey: 'id'
})

car.hasMany(image, { foreignKey: 'car_id', sourceKey: 'car_id' })
image.belongsTo(car, { foreignKey: 'car_id', sourceKey: 'car_id' })
查询代码如下:

return this.findAll({
      attributes: ['car_id', 'car_model'],
      include: [
        {
          model: db.city,
          required: true,
          attributes: [],
          where: { parent_id: 21 }
        },
        {
          model: db.image,
          required: true,
          attributes: ['image_id', 'file_name'],
          where: { sort_number: 1 }
        }
      ],
      offset: 0,
      limit: 5
    })
有没有办法让它像我上面提到的原始查询连接一样?我错过了什么? Sequelise在生成更好的查询方面是否受到限制? 我应该使用原始查询函数自己编写连接吗?这是没有帮助的

请导游,我是新来的。抱歉发了这么长的邮件