2014-04-17 83 views
8

我有以下的列[id, name, CategoryId]Category[id, name]Sequelize.js onDelete: '級聯' 不刪除記錄sequelize

產品型號Product表: -

module.exports = function(sequelize, DataTypes) { 
    var Product = sequelize.define('Product', { 
    name: DataTypes.STRING 
    }, { 
    associate: function(models) { 
     Product.belongsTo(models.Category); 
    } 
    }); 
    return Product 
} 

分類型號: -

module.exports = function(sequelize, DataTypes) { 
    var Category = sequelize.define('Category', { 
    name: { type: DataTypes.STRING, allowNull: false } 
    }, { 
    associate: function(models) { 
     Category.hasMany(models.Product, { onDelete: 'cascade' }); 
    } 
    }); 
    return Category 
} 

當我刪除類別時,它只刪除類別而不是與其關聯的相應產品。我不知道爲什麼會發生這種情況?

更新: Sequelize版本sequelize 1.7.0

==================================== ============================================ 答案(How此我有固定): -

我通過在數據庫中使用Alter命令通過migrationsequelize加入約束,如Add Foreign Key Constraint是一個開放bug實現這一點。

ALTER TABLE "Products" 
ADD CONSTRAINT "Products_CategoryId_fkey" FOREIGN KEY ("CategoryId") 
REFERENCES "Categories" (id) MATCH SIMPLE 
ON DELETE CASCADE 
+1

sequelize.sync的請告訴我輸出?它是否添加了帶有刪除約束的外鍵?你在什麼版本上? –

+0

@JanAagaardMeier產品表具有'CategoryId'列,但不添加外鍵約束。如何添加帶有刪除約束的外鍵? –

+1

我是否需要添加遷移以添加外鍵約束? –

回答

18

我相信你應該把onDelete放在類別模型而不是產品模型中。

module.exports = function(sequelize, DataTypes) { 
    var Category = sequelize.define('Category', { 
    name: { type: DataTypes.STRING, allowNull: false } 
    }, { 
    associate: function(models) { 
     Category.hasMany(models.Product, { onDelete: 'cascade' }); 
    } 
    }); 
    return Category 
} 
+1

謝謝@agchou :) –

+0

@Sampat隨時! – agchou

+0

直到我添加了'hooks:true',這個功能才起作用。不知道這是一個錯誤還是設計 – redbmk

6

爲「sequelize」的:「^ 3.5.1」,它只有當你在belongsTo聲明,這是你的情況Product模型把onDelete='CASCADE'工作。這違背了文檔:http://sequelize.readthedocs.org/en/latest/api/associations/index.html?highlight=onDelete#hasmanytarget-options

請參閱此問題:Sequelize onDelete not working

+3

它用hasMany()正常工作,但我必須在選項中添加「hooks:true」。像User.hasOne(Profile,{onDelete:'cascade',hooks:true}) –

+1

Like @SoichiHayashi,'hasMany'上的'{onDelete:'cascade',hooks:true}'爲我工作。我在Sequelize「3.30」上。反過來讓這些關聯實際上引起了一些問題。 – RYS