2015-04-04 34 views
0

我有一个产品对象也聚集了几个“对象数组” 属性,类别,颜色,大小等现在 我有一个包含对每个对象数据库的表... 产品,属性,类别,颜色,尺寸等 现在我的查询检索产品列表有7-8个连接,因为我的数据库有一些其他表包含产品的多对多关系其相关实体。PHP - 填充聚合对象 - 最佳实践

一切都很好。现在问题出现在我从PDO检索数据时需要填充我的产品 - 以及它的所有聚合对象。 我需要做很多嵌套循环来填充我的产品对象数组,这是一个非常繁琐的活动,也似乎不是一个很好的编程实践(直观)。

我不想使用任何ORM,因为在我看来,ORM对于这些连接数量效率非常低。

什么是处理这种情况的最佳实践。

非常感谢您的时间。

编辑:(基于KIKO软件评论)

凡我大部分的产品检索查询的条款,将包含条件,关系到其聚集的实体,和我之前写的,我有一些多对多关系也是如此。所以这意味着我已经在使用数据库资源“甚至”,如果我去懒加载。那么,在这种情况下,如果加载我的结果的子集,急切加载会是更好的选择?如果是这样,我的原始问题再次保持不变;我能否逃避太多的嵌套循环来加载聚合对象?

感谢

回答

0

你应该有获取和设置的东西像proterties,名作,颜色和大小的产品对象的方法。我通常所做的只是在实际需要时才检索这些对象。所以只有当你使用get例程。通过这种方式,您可以快速创建新产品对象,因为它不会通过检索所有数组来减慢速度,特别是在您甚至不使用它们时。

正如您在评论中指出的那样,请致电延迟加载:您只需检索所需内容。

我看不出有什么理由急切加载数据库数据。换句话说:尽快加载所有内容。唯一的原因可能是,如果你能做得比延迟加载的数据,并且你知道你可能需要所有的数据。

我认为你可以在PDO中做很多事情来加快从不同表格中检索多行(除了正常的数据库优化)。 fetchAll()可能会比fetch()略快,但这将是微不足道的。所以最好的策略仍然是延迟加载

有几种方法可以执行延迟加载。每当调用get方法时,您只能检索请求的行,或者您可以一次检索关联平板电脑中所有需要的行。当需要检索很多行时,第一种方法更加高效,并且您可能只需要其中的几个。第二种方法是最好的选择,当没有很多行被检索时,无论如何您可能需要大部分行。

所以具体使用方法取决于您的需求,但在所有情况下,延迟加载可能是最佳实践。

+0

谢谢你的解决方案,我可以看看它是否适合根据需要。如果我需要急切加载,是否还有其他解决方法? 其次,检索过程的原因通常会减慢:从数据库检索数据或循环访问每个记录以填充对象? (如果数据库表的大小不是太大) – developer 2015-04-04 18:54:42

+0

你的第一个问题应该在答案中得到回答,而不是在评论中回答。至于你的第二个问题:数据库访问的速度远远低于将检索到的数据存储在php对象中的任何事情。所以每当你不需要访问数据库时,你都不应该这样做。数据库访问可以通过很多因素加速,例如:服务器的位置,服务器的速度,索引,正确的数据标准化等等。只是使用连接并不能真正帮到那么多。但是,每当有疑问衡量它! – 2015-04-04 19:20:59

+1

我已根据您的意见编辑了我原来的问题。谢谢你给我一个方向。 – developer 2015-04-04 19:52:07