Как реализовать отношения IS-A в Express с Sequelize для Postgresql? - PullRequest
0 голосов
/ 07 ноября 2019

Я хочу реализовать отношения IS-A. Я читал https://sequelize.org/master/manual/associations.html#one-to-one-associations и думаю, что мне следует использовать отношения «принадлежность». Например, допустим, у меня есть ортопед, который является доктором-врачом. Будет ли это правильный путь?

Orthopedic.belongsTo(models.Doctor, {
    name: 'id',
    type: DataTypes.INTEGER,
    primaryKey: true
 });

Модели:

module.exports = (sequelize, DataTypes) => {
    const Orthopedic = sequelize.define('Orthopedic', {
        specialization: {
            type: DataTypes.STRING,
        },
    });


    return Orthopedic;
};

module.exports = (sequelize, DataTypes) => {
    const Doctor = sequelize.define('Doctor', {
        name: {
            type: DataTypes.STRING,
        },
        age: {
            type: DataTypes.INTEGER,
        },
    });


    return Doctor;
};

1 Ответ

0 голосов
/ 07 ноября 2019

Последовательная документация для belongsTo ассоциации:

Принадлежности - это ассоциации, в которых внешний ключ для отношения «один к одному» существует в исходной модели.

ПростойНапример, игрок, являющийся частью команды с внешним ключом на игроке.

class Player extends Model {}
Player.init({/* attributes */}, { sequelize, modelName: 'player' });
class Team extends Model {}
Team.init({/* attributes */}, { sequelize, modelName: 'team' });

Player.belongsTo(Team); // Will add a teamId attribute to Player to hold the primary key value for Team

Применительно к вашему делу вам нужно добавить

Orthopedic.belongsTo(models.Doctor)

Обратите внимание, что это добавит атрибут doctorId к модели Orthopedic, который не определен в исходном определении модели.

Разница между этим и вашим первоначальным предложением заключается в том, что аргумент параметров относится к ассоциации,и не должен определять атрибуты модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...