1

私はプロペル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>

propジェネレーターを実行すると、BaseUser.phpに重複したフィールドが生成されます

    protected $collIssues;
    protected $collIssuesPartial;

    protected $collIssues;

ご覧のとおり、重複する$collIssuesフィールドがあります。最後のテーブルuser_issueから外部キーを削除すると、問題はなくなります。

誰かが私を助けたり、少なくとも説明したりできますか、これを修正する方法のヒントを教えてください。

ありがとうございました。

4

1 に答える 1

2

問題は、Propel が 2 つの異なる場所から課題のコレクションを追加していることですissue。1 つは の外部キーから、もう 1 つは の外部キーから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();
于 2013-07-05T20:35:27.230 に答える