我有一个推进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 中删除了外键,问题就会消失。
有人可以帮助我或者至少解释一下,给我一个提示如何解决这个问题。
谢谢。
答案 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();