我們正在使用Silex和Doctrine(ODM)開發API,並且我們有對象Story
,它們的屬性爲images
。是否可以禁用ODM Doctrine的延遲加載?
class Story extends AbstractDocument
{
/** @MongoDB\Id */
protected $id;
/**
* @MongoDB\ReferenceMany(
* targetDocument="MyNamespace\Documents\Image",
* storeAs="DBRef"
*)
*/
protected $images = [];
// Other properties and methods
}
我們已經在存儲庫中(在AbstractRepository中,從中擴展了所有其他存儲庫)獲取方法。
public function get(string $documentId) : array
{
$document = $this->createQueryBuilder()
->field('id')->equals($documentId)
->hydrate(false)
->getQuery()
->toArray();
}
此方法返回嵌入和引用的對象,但對於referenceMany
僅返回IDS而沒有數據。
是否可以拒絕延遲加載來獲取所有文檔?
一個可能的解決方案,我們發現 - 重寫方法toArray
。
肯定。您只需將所需的對象添加到select子句。很多例子。我承認我沒有使用odm的查詢生成器,但我認爲它會起作用。我不確定抽象的東西。 – Cerad
@Cerad請你提供一個例子,因爲我在教條網站上找到了 'Reference許多文件將始終作爲集合來處理,以允許延遲加載,而不管所選擇的策略如何。' – yAnTar
希望我可以但我其實不會有一個ODM測試案例。我會認爲 - > select('story','image')會訣竅,但我其實不知道。你可能需要明確地加入故事和圖像。 – Cerad