推动ORM - 与关系类型的多对多关系

时间:2013-07-05 14:35:55

标签: propel

是否可以在Propel中创建关系中的外部字段。主要目的是建立一种关系。

例如,我们有联系人和机会。我需要一种关系类型的联系人和机会之间的关系。

数据示例:

contact_id   | opportunity_id   | association_type
------------------------------------------------------
<contact_id> | <opportunity_id> | <Executive Sponsor>
<contact_id> | <opportunity_id> | <Business Evaluator>

可以在Propel中实现吗?

由于

1 个答案:

答案 0 :(得分:3)

绝对可以,只需将列添加到cross_ref表:

<table name="contact_opportunity" isCrossRef="true">
  <column name="contact_id" type="INTEGER" primaryKey="true"/>
  <column name="opportunity_id" type="INTEGER" primaryKey="true"/>

  <!-- your new field -->
  <column name="association_type" type="VARCHAR" required="true" />

  <foreign-key foreignTable="contact">
    <reference local="contact_id" foreign="id"/>
  </foreign-key>
  <foreign-key foreignTable="opportunity">
    <reference local="opportunity_id" foreign="id"/>
  </foreign-key>
</table>

然后你可以像其他任何东西一样查询它:

$association = ContactOpportunityQuery::create()
  ->filterByContact($contact)
  ->filterByOpportunity($opportunity)
  ->findOne();
$association->getAssociationType();