gpt4 book ai didi

node.js - Sequelize 包含嵌套对象数组 - node.js

转载 作者:行者123 更新时间:2023-11-29 12:18:04 25 4
gpt4 key购买 nike

我有关系:

(轨道) -- M:1 --> (轨道 channel ) <--1:M ( channel )
(用户) -- M:1 --> (用户 channel ) <--1:M ( channel )

  • Channel 模型包括对象 Track 作为 current_track_id 具有一对一的关系。
  • TrackChannel 通过TrackChannel
  • 多对多关联
  • UserChannel 通过 UserChannel
  • 多对多关联

/* Channel.js: */

module.exports = function(sequelize, DataTypes) {
return sequelize.define('channel', {
id: {
allowNull: false,
primaryKey: true,
type: DataTypes.UUID,
defaultValue: DataTypes.UUIDV4,
},
current_counter: {
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: 0
},
track_counter: {
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: 0
},
track_id: {
type: DataTypes.STRING,
allowNull: true,
references: {
model: 'track',
key: 'id'
}
},
createdAt: {
type: DataTypes.TIME,
allowNull: true,
defaultValue: sequelize.fn('now')
},
updatedAt: {
type: DataTypes.TIME,
allowNull: true,
defaultValue: sequelize.fn('now')
}
}, {
tableName: 'channel',
classMethods:{
associate:function(models){
this.belongsToMany(models.user, { onDelete: "CASCADE", foreignKey: 'user_id', otherKey: 'channel_id', through: 'userChannel' })
this.belongsToMany(models.track, { onDelete: "CASCADE", foreignKey: 'track_id', otherKey: 'channel_id', through: 'trackChannel' })
this.belongsTo(models.track, {foreignKey: 'current_track_id' , foreignKeyConstraint: true})
}
}
});
};

你在做什么?

这是我对 channel 的查询。我使用存储库模式:

return db.channel.findOne({
raw:true,
include: [
{ model: db.track, attributes: ['id', 'name','artist_name' ,'album_name'], where: {track_id, }, paranoid: true, required: false}
],
where: {
id: id
}
});

你期望发生什么?

我想得到:

{
"id": "ce183d0a-e702-49a3-83b5-2912bbcf5283",
"current_counter": 0,
"track_counter": 0,
"current_track_id": {} // object or null,
"createdAt": "21:26:56.487217",
"updatedAt": "21:26:56.487217",
"tracks: [] // array or null
}

实际发生了什么?

我尝试创建查询以获取一个 channel ,其中包含当前轨道对象和轨道列表。现在看起来像这样:

{
"id": "ce183d0a-e702-49a3-83b5-2912bbcf5283",
"current_counter": 0,
"track_counter": 0,
"track_id": null,
"createdAt": "21:26:56.487217",
"updatedAt": "21:26:56.487217",
"tracks.id": null,
"tracks.name": null,
"tracks.artist_name": null,
"tracks.album_name": null,
"tracks.trackChannel.id": null,
"tracks.trackChannel.channel_id": null,
"tracks.trackChannel.createdAt": null,
"tracks.trackChannel.updatedAt": null,
"tracks.trackChannel.track_id": null
}

方言:postgres数据库版本:9.6 Sequelize 版本:3.3.0

最佳答案

我猜它会对某人有所帮助,所以提供另一种选择。

您可以将 nest:true 与 sequelize 提供的 raw:true 属性一起使用。

结果:

之前:

{
id: 1,
createdBy: 1,
'Section.id': 1,
'Section.name': 'Breakfast',
}

之后:

{
id: 1,
createdBy: 1,
Section: {
id: 1,
name: ''
}
}

关于node.js - Sequelize 包含嵌套对象数组 - node.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42046052/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com