第四篇 Magento的模型和ORM基础(总结处理多条数据)(三)

在上一章节中是处理单条数据,下面处理多条数据。继续上一章节的代码。

上面的例子我们只是演示了对单个数据操作,现在我们来看看如何同时操作多条记录。我们上面已经讲过,每个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的代码。

Leave a comment

您的电子邮箱地址不会被公开。 必填项已用 * 标注