Sequelize: разница между «ограничениями: true» и «ограничениями: false» с ручным созданием FK для обработки циклических Javascript

Форум по Javascript
Ответить
Anonymous
 Sequelize: разница между «ограничениями: true» и «ограничениями: false» с ручным созданием FK для обработки циклических

Сообщение Anonymous »

Я работаю с Sequelize v6 и сталкиваюсь с циклической зависимостью между двумя моделями: Пользователь и Профиль. Чтобы решить эту проблему, я устанавливаю ограничения: false в одной ассоциации, а затем вручную добавляю ограничение внешнего ключа с помощью queryInterface после синхронизации.
Модель пользователя:

Код: Выделить всё

class User extends Model {
static associate(models) {
User.belongsTo(models.Profile, {
foreignKey: {
name: 'profile_id',
allowNull: true,
},
constraints: false  // Disable FK constraint
});
}
}
Модель профиля:

Код: Выделить всё

class Profile extends Model {
static associate(models) {
Profile.belongsTo(models.User, {
foreignKey: {
name: 'created_by_user_id',
allowNull: false,
},
constraints: true  // Keep FK constraint here
});
}
}
Скрипт синхронизации:

Код: Выделить всё

const { QueryInterface } = require('sequelize');

async function syncDatabase() {
await db.sequelize.sync({ alter: true });

// Manually add FK constraint for User -> Profile
const qi = db.sequelize.getQueryInterface();
await qi.addConstraint('users', {
fields: ['profile_id'],
type: 'foreign key',
name: 'user_profile_id_fkey',
references: {
table: 'profiles',
field: 'id'
}
});
}

syncDatabase();
Я пытаюсь понять разницу между использованием ограничений по умолчанию: true и моим текущим подходом к установке ограничений: false и созданию внешнего ключа вручную.
Влияет ли это на поведение ORM Sequelize или на любые скрытые побочные эффекты, когда Sequelize управляет отношениями в памяти?
Влияет ли это на встроенные методы Sequelize (например, user.getProfile(), user.setProfile() ) или производительность быстрой загрузки (

Код: Выделить всё

User.findOne({ include: Profile })
).

Подробнее здесь: https://stackoverflow.com/questions/798 ... lse-with-m
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»