防止为特定关系导出外键

时间:2011-07-28 10:41:36

标签: symfony1 doctrine symfony-1.4 doctrine-1.2

我正在寻找一种方法来防止教条导出特定关系的外键。例如:

Item:
  connection: doctrine
  #attributes:
  #  export: tables
  columns:
    store_id: integer(4)
    shelf_id: integer(4)
  relations:
    Store:
      local: store_id
      foreign: id
      foreignAlias: Items
    Shelf:
      local: shelf_id
      foreign: id
      foreignAlias: Items

Shelf:
  connection: doctrine
  columns:
    name: string(255)

Store:
  connection: store
  columns:
    name: string(255)

在这里,如果我构建这个模式,doctrine会为Item表生成2个外键:

ALTER TABLE item ADD CONSTRAINT item_store_id_store_id FOREIGN KEY (store_id) REFERENCES store(id);
ALTER TABLE item ADD CONSTRAINT item_shelf_id_shelf_id FOREIGN KEY (shelf_id) REFERENCES shelf(id);

如果您取消注释'attributes'部分,则doctrine将不会创建任何。我只需要item_shelf_id_shelf_id约束。我想要它的原因是因为Item和Shelf表位于同一个数据库中,而Store位于不同的数据库中 - 它的外键根本不适用。

1 个答案:

答案 0 :(得分:0)

假设你正在使用MySQL,这个线程说数据库之间支持外键:http://forums.mysql.com/read.php?22,150829,200251#msg-200251所以问题可能是生成的sql不包含db名称。 SQL构建在Doctrine_Export::getForeignKeyBaseDeclaration中,其中包含以下行:

        if ( ! isset($definition['foreignTable'])) {
            throw new Doctrine_Export_Exception('Foreign reference table missing from definition.');
        }

因此,如果数据库位于同一服务器上,那么在schema.yml中添加包含数据库名称的foreignTable密钥可能会有所帮助。