belongsTo
. का उपयोग करना संबद्ध मॉडलों के स्वामित्व को परिभाषित करता है। इसे और अधिक विस्तार से समझाने के लिए मैं ट्यूटोरियल्स से उद्धृत उदाहरण का उल्लेख करूंगा
Project.hasMany(Task);
Task.belongsTo(Project);
मान लें कि अब आप हटाए गए प्रोजेक्ट के कार्यों में रुचि नहीं रखते हैं। उस स्थिति में आपको कार्यों को मैन्युअल रूप से हटाना होगा, यदि आपने belongsTo
. को परिभाषित नहीं किया होता संगठन। belongsTo
अपने कार्यों पर परियोजनाओं का स्वामित्व स्थापित करता है और डेटाबेस स्वचालित रूप से हटाए गए प्रोजेक्ट से संबंधित कार्यों को भी हटा देगा। इसे cascading delete
. कहा जाता है और कई तालिकाओं पर श्रृंखलाबद्ध कर सकते हैं।
यदि आप निम्न कोड स्निपेट चलाते हैं
const Project = sequelize.define('project', {
name: Sequelize.STRING
});
const Task = sequelize.define('task', {
name: Sequelize.STRING
});
Project.hasMany(Task);
Task.belongsTo(Project);
एक सीक्वेल स्क्रिप्ट में और आउटपुट देखें
Executing (default): DROP TABLE IF EXISTS `projects`;
Executing (default): CREATE TABLE IF NOT EXISTS `projects` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `name` VARCHAR(255), `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL);
Executing (default): PRAGMA INDEX_LIST(`projects`)
Executing (default): DROP TABLE IF EXISTS `tasks`;
Executing (default): CREATE TABLE IF NOT EXISTS `tasks` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `name` VARCHAR(255), `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, `projectId` INTEGER REFERENCES `projects` (`id`) ON DELETE SET NULL ON UPDATE CASCADE);
आप देखेंगे कि कार्य तालिका के निर्माण में कैस्केडिंग व्यवहार सेट किया जा रहा है।
इतना कुछ कहा, अंतिम उत्तर है:यह निर्भर करता है। belongsTo
. का उपयोग बहुत काम आ सकता है या घातक होगा यदि आप हटाए गए प्रोजेक्ट के कार्यों को रखना चाहते हैं। केवल belongsTo
. का उपयोग करें अगर यह आपके आवेदन के संदर्भ में समझ में आता है।