我正在寻找一种方法来防止教条导出特定关系的外键。例如:
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位于不同的数据库中 - 它的外键根本不适用。
答案 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
密钥可能会有所帮助。