Sử dụng belongsTo
xác định quyền sở hữu của các mô hình được liên kết. Để giải thích điều này chi tiết hơn, tôi sẽ tham khảo ví dụ được trích dẫn từ các hướng dẫn
Project.hasMany(Task);
Task.belongsTo(Project);
Giả sử rằng bạn không còn quan tâm đến các nhiệm vụ của một dự án đã bị xóa. Trong trường hợp đó, bạn sẽ phải xóa các tác vụ theo cách thủ công, nếu bạn chưa xác định belongsTo
sự kết hợp. belongsTo
thiết lập quyền sở hữu của các dự án đối với các nhiệm vụ của nó và cơ sở dữ liệu cũng sẽ tự động xóa các tác vụ thuộc về dự án đã bị xóa. Đây được gọi là cascading delete
và có thể xâu chuỗi trên nhiều bảng.
Nếu bạn chạy đoạn mã sau
const Project = sequelize.define('project', {
name: Sequelize.STRING
});
const Task = sequelize.define('task', {
name: Sequelize.STRING
});
Project.hasMany(Task);
Task.belongsTo(Project);
trong một tập lệnh có kích thước tiếp theo và xem kết quả đầu ra
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);
bạn sẽ nhận thấy hành vi xếp tầng đang được thiết lập khi tạo bảng nhiệm vụ.
Đã nói rất nhiều, câu trả lời cuối cùng là:tùy. Việc sử dụng belongsTo
có thể rất hữu ích hoặc sẽ rất nguy hiểm nếu bạn muốn giữ lại các nhiệm vụ của dự án đã xóa. Chỉ sử dụng belongsTo
nếu nó có ý nghĩa trong bối cảnh ứng dụng của bạn.