使用ParamConverter
获取一个对象,似乎给了一个"未初始化的"它的实例。
对象被部分加载,即:它的关系不是从数据库中提取的。
让我举个例子:
Article
title
body
comments (Collection of Comment)
如果我想要控制器Comment
给定的Article
我就这样做
/**
* @Route("/article/{id}/comments",
* name="article_comments",
* defaults={"_format": "json"}
* )
* @ParamConverter("article", class="AppBundle:Article")
*/
public function purchaseOrderGetAction(Article $article)
{
return new JsonResponse($article->getComments());
}
这不会发送任何内容,因为Article
似乎没有完全加载。
dump($article);
给出
DefaultController.php on line 42:
Article {#1186 ▼
-id: 1
-title: "My awesome article"
-body: "Here is the story of..."
-comments: PersistentCollection {#1224 ▼}
-snapshot: []
-owner: Article {#1186}
-association: array:15 [ …15]
-em: EntityManager {#936 …11}
-backRefFieldName: "article"
-typeClass: ClassMetadata {#1213 …}
-isDirty: false
#collection: ArrayCollection {#1225 ▼
-elements: []
}
#initialized: false
}
}
如您所见,details
字段中未加载任何内容。
我是否必须手动加载整个对象,或者是否有某种方法只从数据库中加载所需的comments
?
答案 0 :(得分:0)
我使用
强制details
上的延迟加载
return new JsonResponse($article->getComments()->toArray());
它实际上会为Comment
生成尽可能多Article
+ 1的查询,但我找不到更好的内容。