【问题标题】:Query based on included data in Sequelize根据 Sequelize 中包含的数据进行查询
【发布时间】:2018-03-09 02:26:42
【问题描述】:

我为具有自我关联的人准备了一张桌子,这样人们就可以拥有父母/孩子/堂兄弟/等。

const People = sequelize.define('People', {
  gender: Sequelize.STRING,
  name: Sequelize.STRING,
  age: Sequelize.INTEGER
})

const Relationships = sequelize.define('Relationships')
Items.belongsToMany(Items, { through: Relationships, as: 'relationships' })

我希望能够通过两种方式选择数据:

1。 选择一个 21 岁的人的所有关系

// Returns all of johns relatives who are 21
return People.findOne({
  where: { name: 'John' },
  include: [{
    required: false,
    model: Items,
    as: 'relationships',
    where: { age: 21 }
  }]
})

2。 选择所有与 21 岁有亲属关系的人。这将需要接受多个查询,例如:选择所有有 21 岁或/和男性亲属的人。

有什么想法吗?

【问题讨论】:

标签: node.js postgresql sequelize.js


【解决方案1】:

这里有一些完整的代码可供使用,我希望它对某人有用。请注意,在此示例中,关系不是互惠的,这意味着如果 John 与 Mary 有关系,那么 Mary 不会自动也与 John 有关系(这更像是 John 跟随 Mary 的情况)。但它仍然可以作为如何使用显式连接表进行自关联的示例。

let Sequelize = require('sequelize');
let sequelize = new Sequelize('test', 'test', 'test', {dialect: 'mysql'});

let Person = sequelize.define('Person', {
    name: Sequelize.STRING,
    gender: Sequelize.STRING,
    age: Sequelize.INTEGER
});

let PersonRelationship = sequelize.define('PersonRelationship' /* , more fields could be defined here */);

Person.belongsToMany(Person, {as: 'Relationships', through: PersonRelationship, foreignKey: 'from'});
Person.belongsToMany(Person, {as: 'ReverseRelationships', through: PersonRelationship, foreignKey: 'to'});

let john, mary;

sequelize.sync()
    .then(() => Person.create({name: 'John', gender: 'm', age: 25}))
    .then(p => john = p)
    .then(() => Person.create({name: 'Mary', gender: 'f', age: 21}))
    .then(p => mary = p)
    .then(() => john.addRelationship(mary))
    .then(() => john.getRelationships({where: {age: 21}}))
    .then(relationships => {
        for (let relationship of relationships) {
            console.log('Found relationship:', relationship.name);
        }
    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-17
    • 2021-11-17
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    相关资源
    最近更新 更多