Skip to content

Instantly share code, notes, and snippets.

@Znarkus
Last active August 29, 2015 14:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Znarkus/93dae9f703d6d8ab012b to your computer and use it in GitHub Desktop.
Save Znarkus/93dae9f703d6d8ab012b to your computer and use it in GitHub Desktop.
'use strict';
var Sequelize = require('sequelize');
var sequelize = new Sequelize('mysql://root@127.0.0.1/test');
var Promise = require('bluebird');
var Person;
var PersonRole;
var Role;
var Product;
var Account;
init().then(function() {
return Promise.all([
Person.create({}),
Role.create({}),
Account.create({}),
Product.create({ key: 'example' }),
PersonRole.create({})
]).spread(function(person, role, account, product, personRole) {
return [
role.setAccount(account),
role.setProduct(product),
personRole.setRole(role),
personRole.setPerson(person)
];
}).spread(function() {
return Person.find({
include: {
model: PersonRole,
as: 'personRoles',
include: {
model: Role,
include: [
{
model: Product,
where: { key: 'example' } // Remove this and it works
}
]
}
}
});
}).then(function(person) {
console.log(JSON.stringify(person, null, 2));
});
});
function init() {
return Promise.resolve().then(function() {
Person = sequelize.define('person', {});
PersonRole = sequelize.define('person_role', {});
Role = sequelize.define('role', {});
Product = sequelize.define('product', {
key: { type: Sequelize.STRING }
});
Account = sequelize.define('account', {});
Account.belongsToMany(Product, { as: 'products', through: 'account_product' });
Person.hasMany(PersonRole, { as: 'personRoles' });
PersonRole.belongsTo(Person);
PersonRole.belongsTo(Role);
Role.belongsTo(Account);
Role.belongsTo(Product);
return sequelize.sync();
});
}
'use strict';
var Sequelize = require('sequelize');
var sequelize = new Sequelize('mysql://root@127.0.0.1/test');
var Promise = require('bluebird');
var Person;
var PersonRole;
var Role;
var Product;
var Account;
init().then(function() {
return Promise.all([
Person.create({}),
Role.create({}),
Account.create({}),
Product.create({ key: 'example' }),
PersonRole.create({})
]).spread(function(person, role, account, product, personRole) {
return [
role.setAccount(account),
role.setProduct(product),
personRole.setRole(role),
personRole.setPerson(person)
];
}).spread(function() {
return Person.find({
include: {
model: PersonRole,
as: 'personRoles',
include: {
model: Role,
where: { id: 1 }
}
}
});
}).then(function(person) {
console.log(JSON.stringify(person, null, 2));
});
});
function init() {
return Promise.resolve().then(function() {
Person = sequelize.define('person', {});
PersonRole = sequelize.define('person_role', {});
Role = sequelize.define('role', {});
Product = sequelize.define('product', {
key: { type: Sequelize.STRING }
});
Account = sequelize.define('account', {});
Account.belongsToMany(Product, { as: 'products', through: 'account_product' });
Person.hasMany(PersonRole, { as: 'personRoles' });
PersonRole.belongsTo(Person);
PersonRole.belongsTo(Role);
Role.belongsTo(Account);
Role.belongsTo(Product);
return sequelize.sync();
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment