2017-02-06 6 views
0

У меня есть две модели, service и type. Служба имеет много типов и один и только тип по умолчанию.Как использовать внешний ключ для указания значения по умолчанию без циклической зависимости?

Использование Sequelize Я пытаюсь сделать следующее

// This part is working 
Service.hasMany(Type); 
Type.belongsTo(Service); 

// This part is not 
Type.hasOne(Service, { foreignKey: 'defaultTypeId' }) 

Вторая часть вызывает эту ошибку

Server start problem : Error: Cyclic dependency found. type is dependent of itself. 
Dependency chain: device -> type -> service => type 

Я понимаю ошибку, но я не могу найти в документации способ сделать это , Является ли это возможным ? Это проблема проектирования SQL? Вы видите альтернативные решения?

У меня есть рабочее решение, определяющее вручную модель defaultTypeId в сервисной модели, но она больше не является внешним ключом, поэтому я не могу гарантировать, что идентификатор типа существует.

+0

Может быть, вы можете использовать Sequelize миграции для того, чтобы достичь этого? Первой миграцией будет создание таблицы «Сервис», затем создайте таблицу «Тип» и после этого измените таблицу «Сервис», добавив столбец 'defaultTypeId', который будет внешним ключом. В таком случае вы должны использовать 'constraints: false' при создании связи между моделями, однако ограничение будет существовать в вашей базе данных. – piotrbienias

ответ

0

Вам нужно сделать следующее

Service.hasMany(Type); 
Service.hasOne(Type, { as: 'defaultType' }) 

Type.belongsTo(Service); 
+0

Это тоже не работает. Он не добавляет ограничения внешнего ключа и из doc '' 'HasOne вставляет ключ ассоциации в целевую модель, тогда как BelongsTo вставляет ключ ассоциации в исходную модель.' '' – ThomasThiebaud

+0

Вы пробовали свой код с опцией? –

+0

Да, я пробовал, но я не работал. Я также попытался добавить 'through: Type' – ThomasThiebaud

 Смежные вопросы

  • Нет связанных вопросов^_^