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
のみを使用してください アプリケーションのコンテキストで意味がある場合。