2015-01-22 2 views
0

Предположим, у меня есть 3 таблицы в существующей базе данных mysql; Песня, Певец, Менеджмент. я определил таблицы на моделях sequelize (я использую sequelize и sequelize-Определитель):Как мы можем получить «многослойный» объект с помощью sseelize.js?

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', 
 
    }, 
 
    } 
 
};
управления

. js

var Sequelize = require('sequelize'); 
 

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

Если у меня есть 1 песня в моем БД: ID: 1, название: "Heavy Rotation", singerId: 1

1 певица на моей БД: ID: 1, имя : "AKB48", managementId: 1

1 руководство по моей БД: ID: 1, название: "АКС"

и вар iable названный songObj относится к песне Heavy Rotation. Когда я songObj.getSinger() она возвращает: {ID: 1, имя: "AKB48", managementId: 1}

Я хочу, чтобы мой код, чтобы он мог вернуться {ID: 1, имя: " AKB48 ", управление: {id: 1, имя:" AKS "}}

Возможно ли это на продолжении или другом ORM?

ответ

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] 
     }] 
    }) 
+0

Он работает. Спасибо, Дэн! : D – Nia

+1

Добро пожаловать @Nia, выберите его как лучший ответ, если будете работать правильно, спасибо –

Смежные вопросы