如何从另一个表中查询具有ID的所有列?

时间:2019-08-08 01:20:06

标签: javascript orm sequelize.js

我是续集的新手,遇到了一个我没有找到任何文档的问题。

我的代码中有三个表/模型:

module.exports = (sequelize, DataTypes) => {
    const country= sequelize.define(
        'country',
        { name: DataTypes.STRING }
        }
    );
    country.associate = function(models) {
        country.hasMany(models.city, { foreignKey: 'countryId' });
    };
    return country;
};
module.exports = (sequelize, DataTypes) => {
    const city = sequelize.define(
        'city',
        {
            countryId: DataTypes.INTEGER,
            name: DataTypes.STRING,
        }
        }
    );
    city.associate = function(models) {
        city.belongsTo(models.country, { as: 'country' });
        city.hasMany(models.venue, { foreignKey: 'cityId' });
    };
    return city;
};
module.exports = (sequelize, DataTypes) => {
    const venue= sequelize.define(
        'venue',
        {
            cityId: DataTypes.INTEGER,
            name: DataTypes.STRING,
        }
        }
    );
    venue.associate = function(models) {
        venue.belongsTo(models.city, { as: 'city' });
    };
    return venue;
};

国家->城市->地点。

我的问题是:是否可以查询某个国家/地区的所有场馆?

例如: 国家表:

+----+---------+--+
| id |  name   |  |
+----+---------+--+
|  1 | Canada  |  |
|  2 | USA     |  |
|  3 | Austria |  |
+----+---------+--+

城市表:

+----+---------+-----------+
| id |  name   | countryId |
+----+---------+-----------+
|  1 | Ottawa  |         1 |
|  2 | Toronto |         1 |
|  3 | Chicago |         2 |
+----+---------+-----------+

地点表:

+----+------+--------+
| id | name | cityId |
+----+------+--------+
|  1 | V1   |      1 |
|  2 | V2   |      1 |
|  3 | V3   |      2 |
|  4 | V4   |      3 |
+----+------+--------+

我如何查询加拿大的所有场馆以获得V1 V2 V3?

1 个答案:

答案 0 :(得分:0)

在这里,您可以按include顺序连接表:

// To get venues from country id
venue.findAll({
    include : [
        {
            model : city
            where : {
                countryId : YOUR_COUNTRY_ID
            }
        }
    ]
})

// To get venues from country name
venue.findAll({
    include : [
        {
            model : city
            include : [{
                model : country
                where : {
                    name : YOUR_COUNTRY_NAME
                }
            }]
        }
    ]
})
  

注意:

     

model : YOUR_MODEL_NAME,根据您的代码,我假设您   使用相同名称的地点,城市和国家作为模型,否则您有   根据您的代码进行更改。