Проблема не Полное нарушение в сиквелизе и ассоциациях - PullRequest
0 голосов
/ 07 августа 2020

У меня проблема с Sequelize. Для простоты у меня есть две модели

User и EmailAddress

Определение каждой из них:

User

sequelize.define('User', {
        idUser: {
            type: DataTypes.INTEGER,
            field: 'IdUser',
            allowNull: false,
            primaryKey: true,
            autoIncrement: true
        },
....

const EmailAddress = model.EmailAddress;

    User.hasMany(EmailAddress, {
        as: 'EmailAddresses',
        foreignKey: 'IdUser',
        onDelete: 'NO ACTION',
        onUpdate: 'NO ACTION'
    });

Адрес электронной почты

sequelize.define('EmailAddress', {
        idEmailAddress: {
            type: DataTypes.INTEGER,
            field: 'IdEmailAddress',
            allowNull: false,
            primaryKey: true,
            autoIncrement: true
        },
        idUser: {
            type: DataTypes.INTEGER,
            field: 'IdUser',
            allowNull: false,
            references: {
                model: 'Users',
                key: 'IdUser'
            },
            onUpdate: 'NO ACTION',
            onDelete: 'NO ACTION'
        },
...
    const EmailAddress = model.EmailAddress;
    const User = model.User;

    EmailAddress.belongsTo(User, {
        as: 'User',
        foreignKey: 'IdUser',
        onDelete: 'NO ACTION',
        onUpdate: 'NO ACTION'
    });

Теперь, когда я хочу вставить регистр в обе таблицы, со следующим кодом

var oBaseIncludes = [{
    model: models.EmailAddress,
    as: 'EmailAddresses'
}]

var SavedUser = await models.User.create(oUser, {
    include: oBaseIncludes,
    transaction: t,
    logging: console.log
});

Для простоты oUser это объект со всей информацией о пользователе и

            user.EmailAddresses = [{ 
                default : true,
                token : user.sep6UserMemo
            }];

Sequelize выдает ошибку сообщение: 'notNull Violation: EmailAddress.idUser не может быть нулевым'

Но. Если я добавлю строку (перед сохранением пользователя)

oUser.EmailAddresses[0].idUser = -1;

Это работает! (вставьте в обе таблицы правильно, а не с idUser = -1)

Похоже, что Sequelize не может установить idUser в EmailAddresses. Похоже, что Sequelize не может соединить обе модели.

Надеюсь, кто-нибудь мне поможет!

Заранее спасибо!

...