如何使用Doctrine增加额外的外来约束?

时间:2019-11-01 17:54:30

标签: doctrine-orm doctrine

如何使用Doctrine增加额外的外来约束?例如,假设我具有以下三个实体:

Item.something_unique_to_collection

我现在要确保Collection对于给定的Item是唯一的,并且还希望确保CollectionAccount属于同一个{{1 }}。所需的SQL如图所示,我需要帮助的部分是如何将最后一个CONSTRAINT fk_shared FOREIGN KEY (collection_id, account_id) REFERENCES collection (id, account_id))添加到Item。可以看出,idaccount_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;

0 个答案:

没有答案