收集和按需补水
使用集合而不是数组的优点是,Propel可以按需生成模型对象。使用这个特性,在检索大量结果时永远不会出现内存不足的情况。可通过模型查询的setFormatter()方法,按需补水非常容易触发:
<?php
$authors = AuthorQuery::create()
->limit(50000)
->setFormatter(ModelCriteria::FORMAT_ON_DEMAND)
->find();
foreach ($authors as $author) {
echo $author->getFirstName();
}
1) 这里的"水合作用"是什么意思?
2) 集合和数组的区别是什么?
1。Hidration
A意味着通过在你需要的时候用行数据"填充"你的类/对象来提高性能。
不是从一个非常大的表中执行"SELECT * FROM SomeTable"
,而是首先执行"SELECT ID FROM SomeTable"
,然后在循环中执行"SELECT [COLUMS] FROM SomeTable WHERE ID=[CurrentID]"
,因此"On Demand"
2。集合vs数组Array只是普通的数组,而PropelCollection是对象的对象,它有很多可用的东西,比如:
- 分页结果
- 检查奇数或偶数,
->isOdd()
等 - 检查其中的物品数量
$object->count()
- 格式转换
->toYAML()
,->toCSV()
,->toXML()
集合中的每个项都是PropelObject,因此您仍然可以在循环中使用->getColumn()
获取数据。文档