我们说我有一个名为User
的实体,其中包含firstName, lastName, age
和Posts
的集合等属性。
有没有办法在不加载所有属性/集合的情况下使用User
和EntityManager
方法加载此Find
实体?
我使用REST API
来检索User
,我想分开调用:
User
的{{1}}对象。firstName, lastName and age
集合的User
对象。我知道我可以使用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,也会在获取用户对象后加载帖子。
答案 0 :(得分:2)
为什么不使用序列化组呢?
您可以为自己的论坛添加注释(例如{'default'}和{'collection'}或更具体的{'posts'}。
然后,您只需在Controller中设置序列化上下文,并且只会序列化与组相关的属性。
答案 1 :(得分:0)
您应该编写正确的dql / querybuilder查询,并仅选择You字段。
使用$user->getPosts()
返回API上的所有帖子是不安全的 - 您需要在此处进行分页。
您也可以使用JMSSerializerBundle。它为您提供了为实体定义所需属性的选项。