我们怎样才能获得多层次的'使用sequelize.js的对象?

时间:2015-01-22 13:09:12

标签: mysql node.js orm sequelize.js

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

song.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',
    },
  }
};




singer.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',
    },
  }
};




management.js



var Sequelize = require('sequelize');

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




如果我的数据库上有1首歌: id:1, 标题:"重型旋转", 歌手:1

我的数据库上有1位歌手: id:1, 名称:" AKB48", managementId:1

我的数据库上的1个管理: id:1, 名称:" AKS"

和名为songObj的变量指的是重旋转歌曲。 当我做songObj.getSinger()时它会返回: {id:1,name:" AKB48",managementId:1}

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

在续集或其他ORM上是否可行?

1 个答案:

答案 0 :(得分: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;
    };

不需要身份证明声明。之后,并进行必要的关联,您可以使用Eager Loading来要求您需要的对象:

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

甚至

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