如何使用Doctrine增加额外的外来约束?例如,假设我具有以下三个实体:
Item.something_unique_to_collection
我现在要确保Collection
对于给定的Item
是唯一的,并且还希望确保Collection
和Account
属于同一个{{1 }}。所需的SQL如图所示,我需要帮助的部分是如何将最后一个CONSTRAINT fk_shared FOREIGN KEY (collection_id, account_id) REFERENCES collection (id, account_id))
添加到Item。可以看出,id
和account_id
都已经存在于其他关联的表中,因此我无法以通常的方式进行操作。
CREATE TABLE IF NOT EXISTS account (
id INT(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id))
ENGINE = InnoDB;
CREATE TABLE IF NOT EXISTS collection (
id INT(11) NOT NULL AUTO_INCREMENT,
account_id INT(11) NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY unique_pk (id, account_id),
CONSTRAINT fk_collection_account FOREIGN KEY (account_id) REFERENCES account (id) ON DELETE CASCADE ON UPDATE NO ACTION)
ENGINE = InnoDB;
CREATE TABLE IF NOT EXISTS item (
id INT(11) NOT NULL,
collection_id INT(11) NULL,
account_id INT(11) NOT NULL,
something_unique_to_collection INT(11) NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY unique_something (something_unique_to_collection, collection_id),
CONSTRAINT fk_item_account FOREIGN KEY (account_id) REFERENCES account (id) ON DELETE CASCADE ON UPDATE NO ACTION,
CONSTRAINT fk_item_collection FOREIGN KEY (collection_id) REFERENCES collection (id) ON DELETE SET NULL ON UPDATE NO ACTION,
CONSTRAINT fk_shared FOREIGN KEY (collection_id, account_id) REFERENCES collection (id, account_id))
ENGINE = InnoDB;