Doctrine EntityManager查找对象而不检索所有属性/集合

时间:2016-03-02 19:55:51

标签: php doctrine-orm doctrine

我们说我有一个名为User的实体,其中包含firstName, lastName, agePosts的集合等属性。

有没有办法在不加载所有属性/集合的情况下使用UserEntityManager方法加载此Find实体?

我使用REST API来检索User,我想分开调用:

  1. api / user / 1 - 应仅检索User的{​​{1}}对象。
  2. api / user / 1 / posts - 应检索包含属性和firstName, lastName and age集合的User对象。
  3. 我知道我可以使用Posts并创建单独的方法来检索所需的数据,但我希望这样:

    情景:

    API /用户/ 1

    QueryBuilder

    API /用户/ 1 /帖子

    $userId = 1;
    $user = getEntityManager()->find('entity\User', $userId);
    return $user; // should only load the firstName, lastName, age properties.
    

    我已经尝试过' Extra Lazy Load'内置Doctrine的功能,没有任何结果。

    我的代码:

    $userId = 1;
    $user = getEntityManager()->find('entity\User', $userId);
    return $user->getPosts(); // should load the firstName, lastName, age properties and the collection of posts.
    

    即使我使用fetch类型lazy或extra_lazy,也会在获取用户对象后加载帖子。

2 个答案:

答案 0 :(得分:2)

为什么不使用序列化组呢?

您可以为自己的论坛添加注释(例如{'default'}和{'collection'}或更具体的{'posts'}。

然后,您只需在Controller中设置序列化上下文,并且只会序列化与组相关的属性。

另见documentation

答案 1 :(得分:0)

您应该编写正确的dql / querybuilder查询,并仅选择You字段。

使用$user->getPosts()返回API上的所有帖子是不安全的 - 您需要在此处进行分页。

您也可以使用JMSSerializerBundle。它为您提供了为实体定义所需属性的选项。