collection 和 php (propel) 中的数组有什么区别?

what is the difference between collection and array in php (propel)?

Collections 和 On-Demand 保湿
使用 a collection 而不是数组 的优点是 Propel 可以按需混合模型 objects。使用此功能,您在检索大量结果时永远不会出现内存不足的情况。可通过模型查询的 setFormatter() 方法获得,on-demand 水合作用很容易触发:

<?php
 $authors = AuthorQuery::create()
   ->limit(50000)
   ->setFormatter(ModelCriteria::FORMAT_ON_DEMAND)
   ->find();

foreach ($authors as $author) {
  echo $author->getFirstName();
}

1) 这里的"Hydration"是什么意思?
2)collection和数组有什么区别?

来源:Propel @1.6

1.Hidration

一种通过 "filling" 您 Class/Object 在需要时使用行数据来提高性能的方法。

Propel 不会从非常大的 table 中执行 "SELECT * FROM SomeTable",而是首先启动 "SELECT ID FROM SomeTable",然后在循环中执行 "SELECT [COLUMS] FROM SomeTable WHERE ID=[CurrentID]",因此 "On Demand"

2。集合与数组 数组只是普通数组,而 PropelCollection 是对象的对象,它有很多可用的东西,例如:

  • 分页结果
  • 检查奇数或偶数,->isOdd(),等等
  • 检查其中的项目数$object->count()
  • 格式转换 ->toYAML()->toCSV()->toXML()

集合中的每个项目都是一个 PropelObject,因此您仍然可以在循环中使用 ->getColumn() 获取数据。 Documentation