Sequelize、複合主キーとしての外部キー 質問する

Sequelize、複合主キーとしての外部キー 質問する

2 つの外部キーをモデルの複合主キーとして定義することは可能ですか?

ユーザーは1つの家族のメンバーにしかなれませんが、家族には複数のメンバーが存在する可能性があり、家族メンバーテーブルにはユーザーと家族の参照が必要です。

const User = sequelize.define(
    'User',
    {
        id: { type: dataTypes.INTEGER.UNSIGNED, autoIncrement: true, primaryKey: true },
        name: { type: dataTypes.STRING(30) },
        email: { type: dataTypes.STRING(30) }
        ...
    },
    {
        classMethods: {
            associate(models) {
                User.hasOne(models.FamilyMember, {
                    foreignKey: 'user_id'
                }
            }
        }
    }
)

const Family = sequelize.define(
    'Family',
    {
        name: { type: dataTypes.STRING(30) }
    },
    {
        classMethods: {
            associate(models) {
                Family.hasMany(models.FamilyMember, {
                    foreignKey: 'family_id'
                }
            }
        }
    }
)

const FamilyMember = sequelize.define(
    'FamilyMember',
    {
        name: { type: dataTypes.STRING(30) },
        /*
        family_id and user_id will be here after associations but I wanted them to be a composite primaryKey
        */
    }
)

ベストアンサー1

実際、私はドキュメントからほぼ解決策を得ました:

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

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

デフォルトでは、上記のコードは、UserProjects テーブルに projectId と userId を追加し、以前に定義された主キー属性を削除します。テーブルは、2 つのテーブルのキーの組み合わせによって一意に識別されるため、他の PK 列を持つ必要はありません。

ソース

おすすめ記事