如何在没有特殊字段的情况下在Symfony中加载实体

时间:2016-11-15 12:15:44

标签: php symfony doctrine

我想在我的Controller中加载一个实体,但不希望该实体包含所有字段。我之前使用Jms-Serializer,您可以使用组注释,以避免加载特殊字段。但我在那里你必须将你的对象序列化为json / xml等。 我不希望它序列化,我只是希望这些组功能。我搜索了这个网站和互联网,但没有为我的问题找到任何解决方案。

希望有人理解我的意思并得到一个想法:)

2 个答案:

答案 0 :(得分:1)

有几种可能性:

  1. 使用部分对象(这将提供在水化过程中仅填充指定属性的对象):http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/partial-objects.html#partial-objects
  2. 这很危险,你应该格外小心,因为从所有角度来看它看起来都是一个完全加载的实体。你必须知道为什么一个字段为空 - 只是因为它是空的,或者因为在水化期间它没有被填充。

    1. 不要对物体进行水合,而是查询数组作为水化结果(再次,您可以指定要返回的数组键):http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#array-hydration
    2. 将此用于性能敏感的查询,其中需要大量只读数据和复杂连接。但请注意,您没有可以使用Doctrine管理的任何实体(例如更新,删除等)。

      1. 使用 DTO 作为对象但非Doctrine管理的实体,您可以再次使用新语法指定您希望获得的内容:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#new-operator-syntax
      2. 基本上与2)中的建议相同,但这次你会得到物品。所以你可以使用你所有的OOP智慧。

        1. 创建您自己的自定义水合模式 - 您可以根据自己定义实体应该如何保湿:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#custom-hydration-modes
        2. 非常先进的水平。仅在您需要针对多个实体的特殊水合模式时才有用,并且实际上没有其他选项可以根据您的需要提供性能和质量。

答案 1 :(得分:0)

您可以使用部分对象,但您应该小心。例如:

$q = $em->createQuery("select partial u.{id,name,otherField} from MyApp\Entity\User u");

您可以在此处阅读更多内容:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/partial-objects.html