Database Magento Varien_数据收集:何时执行SQL查询
我想知道Magento如何在内部处理varien_数据收集上的数据库调用。例如:我的一个模型将数据收集返回到块。通过布局XML块添加额外的where子句,然后将其附加到从te模型返回的数据集合中 这是否意味着数据库调用要进行两次?一个在初始$model->getCollection方法上,一个在块中的$collection->addFieldToFilter'x',array'eq'=>y'上 还是Magento对iteraror进行SQL调用 见下面我的情况: 模型类: 块类: 布局XML文件 视图.phtmlDatabase Magento Varien_数据收集:何时执行SQL查询,database,magento,collections,Database,Magento,Collections,我想知道Magento如何在内部处理varien_数据收集上的数据库调用。例如:我的一个模型将数据收集返回到块。通过布局XML块添加额外的where子句,然后将其附加到从te模型返回的数据集合中 这是否意味着数据库调用要进行两次?一个在初始$model->getCollection方法上,一个在块中的$collection->addFieldToFilter'x',array'eq'=>y'上 还是Magento对iteraror进行SQL调用 见下面我的情况: 模型类: 块类: 布局XML文件
Magento使用延迟加载,仅当它确实需要来自resultset的数据时才执行查询。因此,只要不使用结果,就可以继续添加条件或筛选器,而不必真正执行查询。因此,基本上这意味着在模板中调用for循环之前,不会执行查询?嗯。。。不完全是。。。一旦需要从结果中得到一些东西。在很多情况下,这是在结果集上的迭代一开始。例如,在循环之前需要返回元素的数量,例如用于分页等目的时,情况并非如此
<?php
Class X_Y_Model_A extends Mage_Core_Model_Abstract{
...
public function getRelatedItems(){
return $this->getCollection()
->addFieldtoFilter('id',array('eq'=>$this->getId()));
}
}
?>
<?php
Class X_Y_Block_A extends Mage_Core_Block_Template{
private $limit = 5;
public function setDbLimit($limit){
$this->limit = (int)$limit;
return $this;
}
public function getDbLimit(){
return $this->limit;
}
public function getRelatedItems(){
$_collection = Mage::getModel('xy/a')->getRelatedItems();
$_collection->setPageSize($this->getDbLimit());
return $_collection;
}
}
?>
<layout>
...
<reference name="content">
<block type="xy/a" name="xy" as="xy" template="xy/related.phtml">
<action method="setDbLimit"><limit>2<limit></action>
</block>
</reference>
</layout>
<?php
// xy/related.phtml
$_relatedItems = $this->getRelatedItems();
if($_relatedItems->getSize()>0){
foreach($_relatedItems as $_relatedItem){
// HTML Output
}
}
?>