sequelize:如何在不创建连接的情况下查询关联primaryKey的位置

时间:2016-06-09 12:28:17

标签: sequelize.js

型号:

album.js

module.exports = function (sequelize, DataTypes) {
    return sequelize.define('Album', {
        id: {
            field: 'AlbumID',
            type: DataTypes.BIGINT,
            allowNull: false,
            primaryKey: true,
            autoIncrement: true
        },
        name: {
            field: 'Name',
            type: DataTypes.STRING,
            unique: true,
            allowNull: false
        }
    }, {
        tableName: 'Album',
        classMethods: {
            associate: function (models) {
                models.Album.hasMany(models.Image, {
                    as: 'images',
                    foreignKey: {
                        name: 'AlbumID'
                    }
                });
            }
        }
    });
};

image.js

module.exports = function (sequelize, DataTypes) {
    return sequelize.define('Image', {
        id: {
            field: 'ImageID',
            type: DataTypes.BIGINT,
            allowNull: false,
            primaryKey: true,
            autoIncrement: true
        },
        url: {
            field: 'Url',
            type: DataTypes.STRING,
            allowNull: true
        },
        title: {
            field: 'Title',
            type: DataTypes.STRING,
            allowNull: true
        }
    }, {
        tableName: 'Image',
        classMethods: {
            associate: function (models) {
                models.Image.belongsTo(models.Album, {
                    foreignKey: {
                        name: 'AlbumID'
                    },
                    as: 'album'
                });
            }
        }
    });
};

问题是如何获得以下SQL?

SELECT * FROM Image WHERE AlbumID = 1;

我唯一能做的就是:

Image.findAll({
    include: [{
        model: Album,
        as: 'album',
        where: {
            id: 1
        }
    }]
});

但不幸的是,这会在Album和Image表之间创建一个JOIN,这实际上并不是必需的,会影响性能。

如何在where where条件下使用FK ID执行查询,但是没有使用FK表进行连接?

由于

1 个答案:

答案 0 :(得分:1)

我认为您可以简单地将其查询为

Image.findAll({
    where: {
        AlbumID: 1
    }
});

外键应自动添加为"有效"用于查询的列名。