2016-10-27 3 views
0

私たちは、Node.jsのアプリのためのPostgresを使用していて、おおよそのように定義されて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))); 

私はエラーを取得する:「!エントリがエントリに関連付けられていません」

このクエリを実行して、この関連データを同じテーブルの別のレコードから取得するにはどうすればよいですか?

答えて

2

は、すでに関連して定義された名前を持つasプロパティを渡すようにしてください:

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