【发布时间】:2014-12-28 21:57:32
【问题描述】:
我的模型中有几个表以几种不同的方式相互关联,一个用于资金请求的表将同时引用客户和雇主的实体表 - 所以它需要 2 个索引,设置 XML 模型架构的正确方法是什么?
这里是表格[大大缩短了!]:
<object class="FundRequest" table="fund_request" extends="xPDOSimpleObject">
<field key="token" dbtype="varchar" precision="50" phptype="string" null="true" />
<field key="unixtime" dbtype="varchar" precision="50" phptype="string" null="true" />
<field ... a bunch of fields not related to the question... />
<field key="payee_uid" dbtype="int" precision="8" phptype="integer" null="true" />
<field key="client_uid" dbtype="int" precision="8" phptype="integer" null="false" />
<aggregate alias="Entities" class="Entities" local="payee_uid" foreign="id" cardinality="one" owner="foreign" />
<aggregate alias="Entities" class="Entities" local="client_uid" foreign="id" cardinality="one" owner="foreign" />
</object>
<object class="Entities" table="entities" extends="xPDOSimpleObject">
<field key="token" dbtype="varchar" precision="50" phptype="string" null="true" />
<field key="unixtime" dbtype="varchar" precision="50" phptype="string" null="true" />
<field ... a bunch of fields not related to the question... />
<aggregate alias="FundRequest" class="FundRequest" foreign="payee_uid" local="id" cardinality="one" owner="local" />
<aggregate alias="FundRequest" class="FundRequest" foreign="client_uid" local="id" cardinality="one" owner="local" />
</object>
我想我应该将 FundRequest 表中的聚合别名命名为:
<aggregate alias="PayeeEntity" class="Entities" local="payee_uid" foreign="id" cardinality="one" owner="foreign" />
<aggregate alias="ClientEntity" class="Entities" local="client_uid" foreign="id" cardinality="one" owner="foreign" />
所以我可以将它们称为
$object->FundRequest->PayeeEntity->get('whatever');
在我的代码中。
A) 这是正确的吗?
B) 我应该如何在实体表中标记我的别名?
C) 我认为别名类型是正确的,如果删除另一个表中的任何一个记录,则不应删除另一个记录。
【问题讨论】:
-
MODX Revo 不运行 xml 方案。它使用地图文件。最好的解决方案是通过 CMPGenerator extra 从你的表中生成它们。这个方法解决了你所有的问题:A、B、C
-
CMPGenerator 不会为您创建索引,您必须自己创建索引。 CMPGenerator 实际上确实创建了一个 XML 模式,然后从中生成地图和类文件。如果您需要定义表关系 [或别名],则需要编辑该 XML 模式。
-
关于索引。当然,您应该手动完成。 PhpMyAdmin 是最好的工具。它也不会为您创建关系。但是您也应该在 XML 方案中手动创建它们(如创建地图)。我想您正在生成方案来生成地图。我对吗?在这种情况下,它们是不必要的。您可以使用索引创建自定义数据库,然后为 modx 生成地图。 CMPGenerator 还生成 xml 4 u(当然没有关系)。当您以这种方式创建地图时,您可以确保所有数据类型都是正确的。