Magento - getModel()和getResourceModel

时间:2014-11-19 14:11:09

标签: php magento magento-1.7 magento-1.8

我正在根据Magento的官方指南开发Magento的新闻扩展,并预订“Magento PHP开发人员指南”。

在书中有注册表实体,项目和类型 - 我认为这将是一个很好的做法,以便将来可能的类别添加到新闻扩展。现在我只有Item表,其中只有新闻项目。

根据这本书我创建了文件夹结构并放置了我的文件:

-Model
--Mysql4
---Item
----Collection.php
---Item.php
--Resource
----Setup.php
--Item.php

在官方指南中有:

-Model
--Resource
---Item
----Collection.php
---Item.php
--Item.php
  1. 这两者有什么区别?它们都是EAV吗?
  2. 我已按照本书设置了所有内容(安装程序脚本)并且工作正常。 现在我有Controller,Block和模板文件,我正在尝试显示数据库中的数据。

    我的config.xml如下所示:

    <global>
        <models>
            <gott_news>
                <class>Gott_News_Model</class>
                <resourceModel>gott_news_mysql4</resourceModel>
            </gott_news>
            <gott_news_mysql4>
                <entities>
                    <item>
                        <table>gott_news_item</table>
                    </item>
                </entities>
            </gott_news_mysql4>
        </models>
        <resources>
            <gott_news_setup>
                <setup>
                    <module>Gott_News</module>
                    <class>Gott_News_Model_Resource_Setup</class>
                </setup>
            </gott_news_setup>
        </resources>   
    

    在本书之后,它会从DB中检索数据:

    $collection = Mage::getModel('gott_news/item')->getCollection();
    
    指南是这样做的:

    $newsCollection = Mage::getResourceModel('gott_news/item_collection');
    $newsCollection->prepareForList($this->getCurrentPage);
    

    这个prepareForList()函数位于Collection.php文件中。实际上我应该以{{1​​}}结尾传递prepareForList()

    的变量

    问题: 对我来说都不适用。它没有从DB获得任何结果。当我使用currentPage时,它说它是非对象的

    在书中,还有

    prepareForList()

    是否需要从DB获取数据?

    <resources> <mdg_giftregistry_setup> <setup> <module>Mdg_Giftregistry</module> <class>Mdg_Giftregistry_Model_Resource_Setup</class> </setup> <connection> <use>core_setup</use> </connection> </mdg_giftregistry_setup> <mdg_giftregistry_write> <connection> <use>core_write</use> </connection> </mdg_giftregistry_write> <mdg_giftregistry_read> <connection> <use>core_read</use> </connection> </mdg_giftregistry_read> </resources> 我试图获取数据但没有返回任何内容:

    indexController.php indexAction()

    我该怎么做才能让它发挥作用

1 个答案:

答案 0 :(得分:0)

之前我遇到过同样的问题,似乎当ressources是现在使用的时候,mysql4调用是旧方式。 我使用类似的东西,它工作得很好。我不知道它是否与1.7之前的版本兼容

        <models>
        <gottnews>
            <class>Gott_News_Model</class>
            <resourceModel>gottnews_resource</resourceModel>
        </gottnews>    
        <gottnews_resource>
            <class>Gott_News_Model_Resource</class>
            <entities>
                <item>
                    <table>gott_news</table>
                </item>
            </entities>
        </gottnews_resource>
    </models>
    <resources>
        <gott_news_setup>
            <setup>
                <module>Gott_News</module>
                <class>Mage_Core_Model_Resource_Setup</class>
            </setup>
            <connection>
                <use>core_setup</use>
            </connection>
        </gott_news_setup>
        <gottnews_write>
            <connection>
                <use>core_write</use>
            </connection>
        </gottnews_write>
        <gottnews_read>
            <connection>
                <use>core_read</use>
            </connection>
        </gottnews_read>
    </resources>

在表core_ressource中,您需要找到模块的名称及其版本。如果不是,则安装脚本无法正常运行,如果您在magento中激活了日志记录,则需要检查var / log /以获取更多信息。如果是,但您需要再次运行设置,请删除该行。