cakephp是否隐含地实现了BTM关联的删除级联

时间:2015-07-19 12:02:50

标签: cakephp

我是cakephp的初学者,我试图通过书签应用教程来理解它。

http://book.cakephp.org/3.0/en/quickstart.html

所以这是SQL方案:

    CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    email VARCHAR(255) NOT NULL,
    password VARCHAR(255) NOT NULL,
    created DATETIME,
    modified DATETIME
);

CREATE TABLE bookmarks (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    title VARCHAR(50),
    description TEXT,
    url TEXT,
    created DATETIME,
    modified DATETIME,
    FOREIGN KEY user_key (user_id) REFERENCES users(id)
);

CREATE TABLE tags (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255),
    created DATETIME,
    modified DATETIME,
    UNIQUE KEY (title)
);

CREATE TABLE bookmarks_tags (
    bookmark_id INT NOT NULL,
    tag_id INT NOT NULL,
    PRIMARY KEY (bookmark_id, tag_id),
    FOREIGN KEY tag_key(tag_id) REFERENCES tags(id),
    FOREIGN KEY bookmark_key(bookmark_id) REFERENCES bookmarks(id)
);

所以这就是我所做的"烘焙所有" - >

  • 我去了我的应用程序中添加了一个用户并为用户添加了书签和标签。
  • 现在我正在尝试删除抛出SQL错误的用户,说它违反了外键约束,因为书签引用了用户。有道理。
  • 问题出在这里 - 我可以删除一个没有任何错误的书签,但是在我看来它应该抛出一个错误,因为bookmarks_tags引用了一个书签,这也违反了参照完整性。

有人可以告诉我这是如何在内部工作的。这是我第一次使用CakePHP和MVC,我试图了解它的内部工作原理。

1 个答案:

答案 0 :(得分:2)

默认情况下是,如果删除主记录,CakePHP将首先从连接表中删除相关记录。这样做是因为在大多数情况下,如果删除主要记录本身,则不关心关联。

您可以通过在关联配置中将dependent选项设置为false按照所述here来阻止自动删除联接表记录。