Първо, не е необичайно за ORM да се справят с този вид неща вътрешно, вместо да използват ограничения на чужд ключ в базата данни.
Второ, не е необичайно ORM да изискват чифт на изрази за асоцииране, за да задейства цялата вътрешна обработка, която може да очаквате.
var Task = this.sequelize.define('Task', { title: Sequelize.STRING })
, User = this.sequelize.define('User', { username: Sequelize.STRING })
User.hasMany(Task)
Task.belongsTo(User)
И накрая, Sequelize действително ще напише декларации за външен ключ в базата данни, но само ако декларирате и някакъв вид действие (или бездействие) с onUpdate
или onDelete
.
User.hasMany(Task, { onDelete: 'SET NULL', onUpdate: 'CASCADE' })
CREATE TABLE IF NOT EXISTS `Task` (
`id` INTEGER PRIMARY KEY,
`title` VARCHAR(255),
`user_id` INTEGER REFERENCES `User` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
);