生成的推进基类中的重复字段

时间:2013-07-04 14:35:25

标签: php propel

我有一个推进shcema.xml:

    <?xml version="1.0" encoding="UTF-8"?>
<database name="issue-tracker" defaultIdMethod="native">
    <table name="user" phpName="User">
        <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true"/>
        <column name="username" type="varchar" size="32" required="true" />
        <column name="password" type="varchar" size="32" required="true"/>
        <unique>
            <unique-column name="username"/>
        </unique>   
    </table>
    <table name="issue" phpName="Issue">
        <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true"/>
        <column name="title" type="varchar" size="255" required="true" />
        <column name="description" type="varchar" size="200" required="true" phpName="Description"/>
        <column name="user_id" type="integer" required="true"/>
        <foreign-key foreignTable="user">
            <reference local="user_id" foreign="id"/>
        </foreign-key>
    </table>
    <table name="tag" phpName="Tag">
        <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true"/>
        <column name="title" type="varchar" size="255" required="true" />
        <unique>
            <unique-column name="title"/>
        </unique>   
    </table>
    <table name="issue_tag" isCrossRef="true" phpName="IssueTag">
        <column name="issue_id" type="integer" primaryKey="true"/>
        <column name="tag_id" type="integer" primaryKey="true"/>
        <foreign-key foreignTable="issue" onUpdate="CASCADE" onDelete="CASCADE">
            <reference local="issue_id" foreign="id"/>
        </foreign-key>
        <foreign-key foreignTable="tag" onUpdate="CASCADE" onDelete="CASCADE">
            <reference local="tag_id" foreign="id"/>
        </foreign-key>
    </table>
    <table name="user_issue" isCrossRef="true" phpName="UserIssue">
        <column name="user_id" type="integer" primaryKey="true"/>
        <column name="issue_id" type="integer" primaryKey="true"/>
        <foreign-key foreignTable="user" onUpdate="CASCADE" onDelete="CASCADE">
            <reference local="user_id" foreign="id"/>
        </foreign-key>
        <foreign-key foreignTable="issue" onUpdate="CASCADE" onDelete="CASCADE">
            <reference local="issue_id" foreign="id"/>
        </foreign-key>
        <unique>
            <unique-column name="issue_id"/>
        </unique>   
    </table>
</database>

当我运行推进器时,它会在BaseUser.php中生成重复的字段

    protected $collIssues;
    protected $collIssuesPartial;

    protected $collIssues;

正如您所看到的那样,有一个dublicate $ collIssues 字段。如果我从最后一个表 user_issue 中删除了外键,问题就会消失。

有人可以帮助我或者至少解释一下,给我一个提示如何解决这个问题。

谢谢。

1 个答案:

答案 0 :(得分:2)

问题是Propel正在从两个不同的地方添加一组问题,一个来自issue中的外键,另一个来自user_issue中的外键。这是一个简单的修复,您只需要使用refPhpName属性。有关foreign-key属性的更多信息,请查看Propel docs

<table name="issue" phpName="Issue">
    <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true"/>
    <column name="title" type="varchar" size="255" required="true" />
    <column name="description" type="varchar" size="200" required="true" phpName="Description"/>
    <column name="user_id" type="integer" required="true"/>

    <!-- notice the additional attributes below -->
    <foreign-key foreignTable="user" phpName="Creator" refPhpName="CreatedIssues">
        <reference local="user_id" foreign="id"/>
    </foreign-key>
</table>

然后在您的代码中,您可以不同方式访问Creator字段:

$myIssues = $user->getCreatedissues();
$creatorUser = $issue->getCreator();
$issuesCreatedByUser = IssueQuery::create()
  ->filterByCreator($user)
  ->find();