型号:
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表进行连接?
由于
答案 0 :(得分:1)
我认为您可以简单地将其查询为
Image.findAll({
where: {
AlbumID: 1
}
});
外键应自动添加为"有效"用于查询的列名。