【问题标题】:Query self-join with Sequelize, including related record使用 Sequelize 查询自联接,包括相关记录
【发布时间】:2017-03-10 17:42:45
【问题描述】:

我们将 Postgres 用于 Node.js 应用程序,并有一个 Sequelize 模型 Entry,大致定义为:

const entriesModel = sequelize.define('Entry',
    {
        id: {
            type: DataTypes.INTEGER,
            primaryKey: true,
            autoIncrement: true
        },
        post_date: {
            type: DataTypes.DATE,
            allowNull: false,
            defaultValue: () => new Date()
        }
        /* ...more fields here, etc, etc... */
    }, {
        classMethods: {
            associate: (models) => {
                entriesModel.hasOne(models.Entry, {
                    onDelete: 'CASCADE',
                    foreignKey: {
                        name: 'parent_id',
                        allowNull: true
                    },
                    as: 'ParentEntry'
                });
            }
        }
    }
);

基本上,一个条目可能有一个对应的父条目。我想检索所有条目并提取它们的父条目,但是当我尝试时:

return models.Entry.findById(id, {
    include: [
        {
            model: models.Entry,
            where: {
                parent_id: id
            }
        }
    ]
})
.then(entry => Promise.resolve(cb(null, entry)))
.catch(error => Promise.resolve(cb(error)));

我收到错误:“条目未与条目关联!”

如何进行此查询并从同一张表中的另一条记录中提取这些相关数据?

【问题讨论】:

    标签: node.js join foreign-keys relationship sequelize.js


    【解决方案1】:

    尝试使用您已在关联中定义的名称传递 as 属性:

    return models.Entry.findById(id, {
        include: [{
            model: models.Entry,
            as: 'ParentEntry'
        }]
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-30
      相关资源
      最近更新 更多