Php 有没有一种方法可以将单个继承表用作spreep中的外键表?
在一个项目中,我有一个通用的Php 有没有一种方法可以将单个继承表用作spreep中的外键表?,php,inheritance,schema,propel,Php,Inheritance,Schema,Propel,在一个项目中,我有一个通用的Meta表,任何其他表都可以使用它来存储额外的数据 元表有一对(target_type,target_id)列,它们引用元条目所涉及的外部表和外键 e、 g users表的元条目将具有(target_type,target_id)=('users',53) 驴子表的元条目将具有(target_type,target_id)=('donkeys',25) Meta的架构如下所示: <table name="meta" phpName="Meta">
Meta
表,任何其他表都可以使用它来存储额外的数据
元表有一对(target_type,target_id)列,它们引用元条目所涉及的外部表和外键
e、 g
- users表的元条目将具有(target_type,target_id)=('users',53)
- 驴子表的元条目将具有(target_type,target_id)=('donkeys',25)
<table name="meta" phpName="Meta">
<column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true"/>
<column name="target_id" type="integer" required="true" />
<column name="target_type" type="varchar" size="50" required="true" />
<column name="code" type="varchar" size="50" required="true" />
<column name="value" type="varchar" required="true" />
</table>
但我似乎无法将外键中的关系设置为链接到继承的子类DonkeyMeta
i、 e.这不起作用:
<table name="donkeys" phpName="Donkey">
/* ... */
<foreign-key foreignTable="DonkeyMeta">
<reference local="id" foreign="target_id"/>
</foreign-key>
</table>
/* ... */
有没有办法与推进模式建立这种关系?不幸的是,没有。我已经实现了与您相同的设置,并且我已经询问了Propel的创建者(他没有给我一个好的答案)。我所能做的就是为涉及的各种实体重写/添加一些方法到*查询类。不幸的是,没有。我已经实现了与您相同的设置,并且我已经询问了Propel的创建者(他没有给我一个好的答案)。我所能做的最好的事情就是为所涉及的各种实体重写/添加一些方法到*查询类。好的一点,这个问题对测试和固定装置也有巨大的影响,如前所述好的一点,这个问题对测试和固定装置也有巨大的影响,如前所述
<table name="meta" phpName="Meta">
<column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true"/>
<column name="target_id" type="integer" required="true" />
<column name="target_type" type="varchar" size="50" required="true" inheritance="single">
<inheritance key="users" class="UserMeta"/>
<inheritance key="donkeys" class="DonkeyMeta"/>
</column>
<column name="code" type="varchar" size="50" required="true" />
<column name="value" type="varchar" required="true" />
</table>
<table name="donkeys" phpName="Donkey">
/* ... */
<foreign-key foreignTable="DonkeyMeta">
<reference local="id" foreign="target_id"/>
</foreign-key>
</table>