在上一章节中是处理单条数据,下面处理多条数据。继续上一章节的代码。
上面的例子我们只是演示了对单个数据操作,现在我们来看看如何同时操作多条记录。我们上面已经讲过,每个Magento的模型都有一个独特的模型集合 。 这些模型集合实现了PHP的“IteratorAggregate”和“Countable”接口,也就是他们可以作为“count”函数的参数,并且可以在“for each”语句中使用。
现在让我们来看看如何使用模型集合,在Blog控制器中添加如下方法
<?php
/**
* Created by PhpStorm.
* User: lollicup
* Date: 2019/4/24
* Time: 14:22
*/
class Infinity_Helloworld_BlogController extends Mage_Core_Controller_Front_Action {
/**
* 获取数据集合
*/
public function showAllBlogPostsAction() {
$posts = Mage::getModel('helloworld/blogpost')->getCollection();
foreach($posts as $blog_post){
echo '<h3>'.$blog_post->getTitle().'</h3>';
echo nl2br($blog_post->getPost());
}
}
}
访问如下URL
http://local_mgt1938.com/index.php/helloworld/blog/showAllBlogPosts
你应该看到以下异常
include(App\Helloworld\Model\Resource\Mysql4\Blogpost\Collection.php) [function.include]: failed to open stream: No such file or directory
我想你不会被这个异常吓到,已经熟门熟路了。我们需要添加一个PHP类,定义Blogpost的模型集合。每个模型都有一个“protected”属性“_resourceCollectionName”【注:从父类“Mage_Core_Model_Abstract”继承来的】。这个属性的值是这个模型对应的模型集合的URI。
protected '_resourceCollectionName' => string 'helloworld/blogpost_collection'
在默认情况下,这个值是模型的URI加上“_collection”。Magento把模型集合也看做是一种资源(Resrouce),所以运用资源模型的命名规则,模型集合的全名是:
Infinity_Helloworld_Model_Resource_Mysql4_Blogpost_Collection
然后我们要创建如下文件:
File: app/code/local/Infinity/Helloworld/Model/Resource/Mysql4/Blogpost/Collection.php
<?php
/**
* Created by PhpStorm.
* User: lollicup
* Date: 2019/4/24
* Time: 14:25
*/
class Infinity_Helloworld_Model_Resource_Mysql4_Blogpost_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract {
protected function _construct()
{
$this->_init('helloworld/blogpost');
}
}
这里的参数是模型的URI,用来初始化模型集合。刷新页面,你应该看到数据库中的Blog都显示出来了。
首先我要恭喜你,到这里你已经创建并配置了你的第一个Magento模型。在后面的章节中我们将讲解Magento的另外一种模型Entity Attribute Value Model。
在这章开始的时候,我撒了一个小谎。其实在Magento中,并不是所有的模型都继承自“Mage_Core_Model_Abstract”。在Magento最初的版本中,这个抽象类并不存在。所以有很多模型是直接继承自“Varien_Object”。不过这些并不影响我们创建Magento模型,了解一下就可以了,方便阅读Magento的代码。