【问题标题】:How can we get 'multilayered' object using sequelize.js?我们如何使用 sequelize.js 获得“多层”对象?
【发布时间】:2015-02-07 10:31:02
【问题描述】:

假设我在现有的 mysql 数据库上有 3 个表;歌曲,歌手,管理。 我在 sequelize 模型上定义了表(我使用 sequelize 和 sequelize-definer):

歌曲.js

var Sequelize = require('sequelize');

module.exports = {
  fields: {
    id: {
      type: Sequelize.INTEGER(11),
      allowNull: false,
    },
    title: {
      type: Sequelize.STRING,
      allowNull: true,
    },
    singerId: {
      type: Sequelize.INTEGER(11),
      allowNull: true,
      reference: 'songs',
    },
  }
};

歌手.js

var Sequelize = require('sequelize');

module.exports = {
  fields: {
    id: {
      type: Sequelize.INTEGER(11),
      allowNull: false,
    },
    name: {
      type: Sequelize.STRING,
      allowNull: true,
    },
    managementId: {
      type: Sequelize.INTEGER(11),
      allowNull: true,
      reference: 'singers',
    },
  }
};

管理.js

var Sequelize = require('sequelize');

module.exports = {
  fields: {
    id: {
      type: Sequelize.INTEGER(11),
      allowNull: false,
    },
    name: {
      type: Sequelize.STRING,
      allowNull: true,
    },
  }
};

如果我的数据库中有 1 首歌曲: 编号:1, 标题:“重度旋转”, 歌手编号:1

我的数据库中有 1 位歌手: 编号:1, 名称:“AKB48”, managementId:1

我的数据库上的 1 个管理: 编号:1, 名称:“AKS”

还有一个名为songObj 的变量指的是Heavy Rotation song。 当我做 songObj.getSinger() 它将返回: {id:1,名称:“AKB48”,managementId:1}

我想要我的代码,以便它可以返回 {id:1,名称:“AKB48”,管理:{id:1,名称:“AKS”}}

在 sequelize 或其他 ORM 上是否可行?

【问题讨论】:

    标签: mysql node.js orm sequelize.js


    【解决方案1】:

    您想要的可以通过 Sequelize 实现,您只需修改模型的定义,使其更像 recommended convention

        module.exports = function(sequelize, DataTypes) {
          var Song = sequelize.define("Song", {
            title: {
                type: Sequelize.STRING,
                allowNull: true
            }
            // and so on ...
          });
    
          return Song;
        };
    

    不需要 id 声明。之后,进行所需的关联,您可以使用Eager Loading 来请求您需要的对象,如下所示:

        Singer.find({where: { id: 1 }, include : [Management]}})
    

    甚至

        Song.find({where: { id: 1 }, include :
            [{
                model: Singer, 
                include: [Management]
            }]
        }) 
    

    【讨论】:

    • 不客气@Nia,如果工作正常,请选择它作为最佳答案,谢谢
    猜你喜欢
    • 1970-01-01
    • 2020-03-07
    • 1970-01-01
    • 2016-11-12
    • 2023-03-31
    • 1970-01-01
    • 2021-07-24
    • 2017-08-05
    • 1970-01-01
    相关资源
    最近更新 更多