我正在使用Propel开发一个用户可以开发自己的模式的系统,所以我正在研究一些“边缘情况”。我遇到了一个我认为Propel应该不允许的架构,但它似乎确实构建了。有人可以为此建议一个用例吗?
<?xml version="1.0" encoding="UTF-8"?>
<database name="test" defaultIdMethod="native">
<table name="test_event">
<column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true" />
<column name="name" type="varchar" size="50" required="true" />
<column name="description" type="varchar" size="250" />
<column name="location" type="varchar" size="250" />
<column name="nearest_city" type="varchar" size="100" />
<column name="organiser_id" type="integer" required="true" />
<!-- This FK is incomplete -->
<foreign-key foreignTable="test_organiser">
<reference local="organiser_id" foreign="id" />
</foreign-key>
</table>
<table name="test_organiser">
<!-- Has composite PK -->
<column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true" />
<column name="secondary" type="integer" required="true" primaryKey="true" />
<column name="name" type="varchar" size="50" required="true" />
<column name="email" type="varchar" size="100" />
</table>
</database>
如您所见,事件表对组织者表的外部引用不完整。我原以为Propel会发现它并在构建时把它踢掉 - 但显然不是!我不明白为什么这会有用 - setTestOrganiser
中的getTestOrganiser
和BaseTestEvent
方法只能引用复合PK的一部分(当然,因为事件方面只是了解organiser_id部分。)
Propel 1.6.1,PHP 5.2.17。