Я пытаюсь выполнить запрос, чтобы найти песни исполнителей, за которыми следует пользователь. У меня есть запрос Sequelize, подобный этому, однако он возвращает каждый результат песни в базе данных. Вот мой запрос:
Song.findAll({
include: [
{
model: Artist,
include: [
{
model: User,
as: 'Followers',
where: { id: 3 }
}
]
}
]
}).then((result) => {
res.status(200).send(result);
})
Между Artist
и User
существует отношение многие ко многим, в то время как между Artist
и Song
существует отношение один ко многим.
Я хочу получать только песни исполнителей, за которыми следует пользователь. Например, вот два набора данных, которые возвращаются.
Это один результат, который возвращается
Имеет смысл, потому что пользователь следует artistID
= 9.
{
"id": 4,
"releaseDate": "1550188800",
"title": "Beggar's song",
"artistID": 9,
"approved": true,
"updatedAt": "2019-04-06T06:42:00.000Z",
"Artist": {
"id": 9,
"followers": 4,
"name": "Matt Maeson",
"updatedAt": "2019-05-04T10:52:52.000Z",
"Followers": [
{
"id": 3,
"username": "uncvrd",
"updatedAt": "2019-07-03T21:57:41.000Z",
"UserArtist": {
"userID": 3,
"artistID": 9,
"createdAt": "2019-02-17T00:00:00.000Z",
"updatedAt": "2019-02-17T00:00:00.000Z"
}
}
]
}
},
Почему этот следующий возвращается ???
Пользователь не следует artistID
= 22, поэтому свойство Artist имеет значение null, но это не должно возвращаться в моем запросе .... верно?
{
"id": 27,
"releaseDate": "1550707200",
"title": "Is It Love",
"artistID": 22,
"approved": true,
"updatedAt": "2019-04-06T06:42:00.000Z",
"Artist": null
}
Спасибо за помощь!
Редактировать: вот мои модели Sequelize
Song.js
module.exports = (sequelize, DataTypes) => {
const Song = sequelize.define('Submission', {
releaseDate: DataTypes.STRING,
title: DataTypes.STRING,
artistID: DataTypes.INTEGER,
approved: DataTypes.BOOLEAN,
}, {});
Song.associate = function (models) {
Song.belongsTo(models.Artist, { foreignKey: 'artistID' });
};
return Song;
};
Artist.js
module.exports = (sequelize, DataTypes) => {
const Artist = sequelize.define('Artist', {
followers: DataTypes.INTEGER,
name: DataTypes.STRING,
}, {});
Artist.associate = function (models) {
// associations can be defined here
Artist.hasMany(models.Song, { foreignKey: 'artistID' });
};
return Artist;
};
user.js
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define('User', {
username: DataTypes.STRING,
}, {});
User.associate = function(models) {
// associations can be defined here
User.belongsToMany(models.Artist, { through: models.UserArtist, foreignKey: 'userID', otherKey: 'artistID' });
};
return User;
};
UserArtist.js
module.exports = (sequelize, DataTypes) => {
const UserArtist = sequelize.define('UserArtist', {
userID: DataTypes.INTEGER,
artistID: DataTypes.INTEGER
}, {});
UserArtist.associate = function(models) {
// associations can be defined here
};
return UserArtist;
};