我了解到,在学说中我可以归还部分对象。当我只是返回结果集的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应用程序)。