ParamConverter序列化未初始化的对象

时间:2016-07-22 13:17:44

标签: doctrine-orm symfony

使用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

1 个答案:

答案 0 :(得分:0)

我使用

强制details上的延迟加载
return new JsonResponse($article->getComments()->toArray());

它实际上会为Comment生成尽可能多Article + 1的查询,但我找不到更好的内容。