我们正在使用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