cakephp是否隐式实现了BTM关联的delete级联?



我是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)
);

下面是我在"bake all" ->

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

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

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

您可以通过在关联配置中将dependent选项设置为false来防止自动删除连接表记录。

最新更新