簡體   English   中英

教義多對多,自我指稱的怪異行為(Symfony2)

[英]Doctrine Many-To-Many, Self-referencing weird behavior (Symfony2)

我在學說多對多,自指教義文檔方面遇到麻煩

遵循文檔中的示例:

<entity
    name="Application\Sonata\ProductBundle\Entity\Usersss"
    table="usersss"
    >

    <id name="id" type="integer" column="id">
        <generator strategy="AUTO"/>
    </id>

    <many-to-many field="myFriends" target-entity="Application\Sonata\ProductBundle\Entity\Usersss" inversedBy="friendsWithMe">
        <join-table name="friends">
            <join-columns>
                <join-column id="user_id" referenced-column-name="id" />
            </join-columns>
            <inverse-join-columns>
                <join-column id="friend_user_id" referenced-column-name="id"/>
            </inverse-join-columns>
        </join-table>
    </many-to-many>

    <many-to-many field="friendsWithMe" target-entity="Application\Sonata\ProductBundle\Entity\Usersss" mappedBy="myFriends"/>
</entity>

Symfony2應該生成類似的內容(如文檔中所寫)

CREATE TABLE usersss (
    id INT AUTO_INCREMENT NOT NULL,
    PRIMARY KEY(id)
) ENGINE = InnoDB;
CREATE TABLE friends (
    user_id INT NOT NULL,
    friend_user_id INT NOT NULL,
    PRIMARY KEY(user_id, friend_user_id)
) ENGINE = InnoDB;
ALTER TABLE friends ADD FOREIGN KEY (user_id) REFERENCES User(id);
ALTER TABLE friends ADD FOREIGN KEY (friend_user_id) REFERENCES User(id);

但是Symfony2嘗試生成此代碼:

CREATE TABLE usersss (id INT AUTO_INCREMENT NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
CREATE TABLE friends (usersss_id INT NOT NULL, PRIMARY KEY(usersss_id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
CREATE TABLE usersss_usersss (usersss_source INT NOT NULL, usersss_target INT NOT NULL, INDEX IDX_A8965F1863AC54F9 (usersss_source), INDEX IDX_A8965F187A490476 (usersss_target), PRIMARY KEY(usersss_source, usersss_target)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
ALTER TABLE friends ADD CONSTRAINT FK_21EE7069A764047 FOREIGN KEY (usersss_id) REFERENCES usersss (id);
ALTER TABLE usersss_usersss ADD CONSTRAINT FK_A8965F1863AC54F9 FOREIGN KEY (usersss_source) REFERENCES usersss (id) ON DELETE CASCADE;
ALTER TABLE usersss_usersss ADD CONSTRAINT FK_A8965F187A490476 FOREIGN KEY (usersss_target) REFERENCES usersss (id) ON DELETE CASCADE;

如果我將inversedBy更改為inversed-by,將mapBy更改為mapping-by,則mysql看起來像

CREATE TABLE usersss (id INT AUTO_INCREMENT NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
CREATE TABLE friends (usersss_id INT NOT NULL, PRIMARY KEY(usersss_id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
ALTER TABLE friends ADD CONSTRAINT FK_21EE7069A764047 FOREIGN KEY (usersss_id) REFERENCES usersss (id);

而且仍然看起來不像文檔示例

我不明白為什么我會有如此奇怪的行為...

編輯:實際上,我發現了問題:由於您使用的是XML,因此需要使用“ inversed-by”而不是“ inversedBy”和“ mapped-by”而不是“ mappedBy”。

編輯2:此外,在聯接列中用“名稱”替換“ id”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM