我想知道Magento如何在varien_data_collections上内部处理数据库调用。例如:我的一个模型将数据集合返回给Block。其他where子句通过Layout XML块添加,然后附加到te model中返回的数据集合。
这是否意味着数据库调用两次?一个位于初始$model->getCollection()
方法,另一个位于区块中的$collection->addFieldToFilter('x',array('eq'=>'y'))
。
或者Magento是否在iteraror上进行SQL调用?
请参阅下面的情况:
模特课程:
<?php
Class X_Y_Model_A extends Mage_Core_Model_Abstract{
...
public function getRelatedItems(){
return $this->getCollection()
->addFieldtoFilter('id',array('eq'=>$this->getId()));
}
}
?>
Block Class:
<?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;
}
}
?>
布局XML文件
<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>
查看.phtml
<?php
// xy/related.phtml
$_relatedItems = $this->getRelatedItems();
if($_relatedItems->getSize()>0){
foreach($_relatedItems as $_relatedItem){
// HTML Output
}
}
?>
答案 0 :(得分:0)
Magento使用延迟加载,只在真正需要来自结果集的数据时才执行查询。因此,只要您不使用结果,就可以在不真正执行查询的情况下继续添加条件或过滤器。