0

フェザー シークエル化を使用して 2 つのモデル間に多対多の関係を追加したいのですが、結合テーブルに追加の属性を追加したいと考えています。続編のドキュメントはそれについて明確です:私はこれが好きな新しいモデルを作成する必要があります

const User = sequelize.define('user', {})
const Project = sequelize.define('project', {})
const UserProjects = sequelize.define('userProjects', {
    status: DataTypes.STRING
})

User.belongsToMany(Project, { through: UserProjects })
Project.belongsToMany(User, { through: UserProjects })

しかし、フェザー アプリケーションで新しいモデルを定義すると、データベースに作成されないため、リレーションが機能しません。

4

1 に答える 1

1

私が正しく理解しているかどうかを確認するために: リンク テーブル (例: user_projects) を作成し、モデルをそれにマップして、とモデルUserProjectsの間に多対多の関係を作成しますか?UserProject

likeの代わりにhasManyand関数を使用できます。belongsTobelongsToMany

User.hasMany(UserProjects, {
  as: 'UserProjects',
  foreignKey: 'user_id' // this is what you're missing
});
Project.hasMany(UserProjects, {
  as: 'UserProjects',
  foreignKey: 'project_id' // this is what you're missing
});

UserProjects.belongsTo(User, {
  as: 'Users',
  foreignKey: 'user_id'
});
UserProjects.belongsTo(Projects, {
  as: 'Projects',
  foreignKey: 'project_id'
});

また、リンク テーブルの列user_idと列を外部キーとして定義する必要があります。project_id

次に、リンクテーブルに必要な他の属性を追加できます(statusまたは他の属性は何でもかまいません)。

于 2019-01-25T14:32:15.747 に答える