我有一个推进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;如您所见,有双倍的$collIssues字段。如果我从最后一个表user_issue中删除外键,问题就会消失。
有人能帮我,或者至少解释一下,给我一个解决办法的提示吗?
谢谢。
发布于 2013-07-05 20:35:27
问题在于Propel是从两个不同的地方添加问题的集合,一次来自issue中的外键,一次来自user_issue中的外键。这是一个简单的解决方法,您只需使用refPhpName属性即可。有关Propel文档属性的更多信息,请查看foreign-key。
<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();https://stackoverflow.com/questions/17472963
复制相似问题