学说部分对象......是为了表现吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学说部分对象......是为了表现吗?相关的知识,希望对你有一定的参考价值。

我了解到,在学说中我可以归还部分对象。当我只是返回结果集的print_r()时,它们似乎仍然包含字段的定义,除了当我回显它们时我得到第n个。所以我猜这些定义是存在但价值不是。这是为了表现吗?例如。在SQL中我shld做SELECT field1, field2而不是SELECT *

答案

据我所知,正如你所说,选择部分对象的能力就是表现。但是,除非您的表非常大,或者包含具有大型数据的列,否则我怀疑会产生非常大的影响。

在第一次创建对象时,Doctrine可以延迟加载未选中的列中的值。这可能会产生性能问题,因为Doctrine将执行更多查询以获取丢失的数据,因此请始终确保选择使用的数据。

另一答案

我完全不明白你的问题但是在DQL中你可以做SELECT *,因为ORM总是会创建一个SELECT field1, field2,....查询。

使用常规SQL,您应该避免选择*,因为它会降低性能。

另一答案

部分查询非常有用,您希望结果不包括各种数据,如密码等。

我将它用于我的REST API,而我不想返回诸如User对象密码之类的数据。

示例可能是:

 SELECT .... JOIN  ... partial user.{user_id, email} .... 

然后用Query::HYDRATE_ARRAY返回数组。显然,如果你没有保湿你的结果,那就不会那么有意义了。

这很有用,因为您不希望检索用户哈希密码以供所有人查看(即在REST API中将数据发送到客户端应用程序,例如主干驱动,甚至是iPhone / android应用程序)。

以上是关于学说部分对象......是为了表现吗?的主要内容,如果未能解决你的问题,请参考以下文章

学说减慢了表现

常用Javascript代码片段集锦

如何在学说 2 中创建对象属性的查询构建器

对寻呼机对象使用学说 findBy/getBy 魔术方法?

带有红宝石集合/可枚举的酷技巧和富有表现力的片段[关闭]

Symfony2 和空关系的学说