sequelize 关联键在响应中为大写

问题描述 投票:0回答:3

如何使

Music
成为“音乐”?

{
  id: 4
  name: "playlist 1"
  created_at: "2015-04-21T21:43:07.000Z"
  updated_at: "2015-04-23T20:44:50.000Z"
  Music: [
    {
      id: 12
      name: "Deorro - Five Hours (Static Video) [LE7ELS]"
      video_id: "K_yBUfMGvzc"
      thumbnail: "https://i.ytimg.com/vi/K_yBUfMGvzc/default.jpg"
      created_at: "2015-04-22T21:46:21.000Z"
      updated_at: "2015-04-22T21:46:21.000Z"
      playlist_id: 4
    }
  ]
}

我的查询类似于:

.get(function (req, res) {
    db.Playlist.findAll({
      include: [db.Music]
    }).then(function (playlists) {
      if(!playlists) {
        res.status(404).json({message: 'No playlist found!'});
        return;
      }

      res.json(playlists)
    })
  })

播放列表型号:

module.exports = function(sequelize, DataType) {
  var Playlist = sequelize.define('Playlist', {
    name: DataType.STRING
  }, {
    classMethods: {
      associate: function(models) {
        Playlist.hasMany(models.Music, { foreignKey: 'playlist_id' });
      }
    },
    tableName:   'playlists',
    underscored: true
  });

  return Playlist;
};

音乐模型:

module.exports = function(sequelize, DataType) {
  var Music = sequelize.define('Music', {
    name: DataType.STRING,
    video_id:  DataType.STRING,
    thumbnail:  DataType.STRING
  }, {
    classMethods: {
      associate: function(models) {
        Music.belongsTo(models.Playlist);
      }
    },
    tableName:   'musics',
    underscored: true
  });

  return Music;
}
sequelize.js
3个回答
6
投票

更改型号名称中的大小写:

sequelize.define('music', ...)

或者在关联中提供

as
键:

Playlist.hasMany(Music, { as: 'music' })

2
投票

更方便参考的工作代码:

播放列表型号:

module.exports = function(sequelize, DataType) {
  var Playlist = sequelize.define('Playlist', {
    name: DataType.STRING
  }, {
    classMethods: {
      associate: function(models) {
        Playlist.hasMany(models.Music, { as: 'music', foreignKey: 'playlist_id' });
      }
    },
    tableName:   'playlists',
    underscored: true
  });

  return Playlist;
};

音乐模型:不变

查询:

controller.route('/playlist')
  .get(function (req, res) {
    db.Playlist.findAll({
      include: [{ model: db.Music, as: 'music' }]
    }).then(function (playlists) {
      if(!playlists) {
        res.status(404).json({message: 'No playlist found!'});
        return;
      }

      res.json(playlists)
    })
  })

0
投票

有一个更短的解决方案。例如,报告模型,在定义模型时传递“名称”选项:

name: {
  singular: 'report',
  plural: 'reports'
}
© www.soinside.com 2019 - 2024. All rights reserved.