1
我有這個問題:我有幾個文件擴展了一些基礎文檔。所有這些文檔都有一些註釋功能,用戶可以向其添加註釋。因此,我有註釋文檔存儲在單獨的集合中(它需要被搜索並且不能被嵌入)並且擁有引用該註釋屬於的文檔的所有者屬性。我有麻煩主義造型的:繼承原則ODM雙向引用
<?php
/** @ODM\MappedSuperclass */
abstract class Base {
/** @ODM\Id */
public $id;
/** @ODM\ReferenceMany(targetDocument="Note", mappedBy="owner") */
public $notes;
}
/** @ODM\Document */
class MyDocument extends Base {
/** @ODM\String */
public $name;
}
/** @ODM\Document */
class Note {
/** @ODM\Id */
public $id;
/** @ODM\ReferenceOne(targetDocument="Base", inversedBy="notes") */
public $owner;
/** @ODM\String */
public $text;
}
$mdoc = new MyDocument;
$note = new Note;
$mdoc->name = 'foo';
$note->text = 'bar';
$mdoc->notes[] = $note;
$note->owner = $mdoc;
$dm->persist($mdoc);
$dm->persist($note);
$dm->flush();
$dm->clear();
$note2 = $dm->find(Note::class, $note->id);
echo $note2->owner->name;
我也得到了:通知:未定義的屬性:Proxies__CG __ \基地:: $名稱。在其他情況下,我得到:無法找到標識符爲「XXX」的「Proxies__CG __ \ Base」文檔。
它顯然會嘗試加載基類而不是MyDocument。如何強制它加載正確的類?我嘗試將Base設置爲MappedSuperclass,設置鑑別器字段,省略targetDocument等。並且沒有按預期工作,並以不同的錯誤/錯誤行爲結束。
這甚至可能嗎?
可能相關:
- Weird Doctrine ODM exception when using references together with inheritance
- https://github.com/doctrine/mongodb-odm/issues/442
注:沒有人幫真的還是我錯過了什麼。
非常感謝。只是說明:最低要求的部分是DiscriminatorField(我認爲id有一些默認值)。繼承類型可以省略(每個類的集合是默認的)和鑑別器映射(保存類名稱) –
啊,小心點。繼承類型默認爲「無」。您可能在開發過程中沒有注意到它,但除非您設置了繼承類型,否則元數據緩存會忽略歧義字段。隨着下一個bug修復版本的發佈,這個問題將得到解決(詳情請參見PR [#1556](https://github.com/doctrine/mongodb-odm/pull/1556))。在此之前,請設置繼承類型以節省生產中的麻煩。 – alcaeus