【问题标题】:Magento - getModel() and getResourceModelMagento - getModel() 和 getResourceModel
【发布时间】:2014-11-19 14:11:09
【问题描述】:

我正在按照 Magento 的官方指南和《Magento PHP 开发人员指南》一书为 Magento 开发新闻扩展。

书中有注册实体、项目和类型——我认为这将是未来将类别添加到新闻扩展中的一个好习惯。现在我只有一个 Item 表,其中只有新闻项目。

根据本书,我创建了文件夹结构并将文件放置如下:

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

在官方指南中有:

-Model
--Resource
---Item
----Collection.php
---Item.php
--Item.php
  1. 这两者有什么区别?他们都是 EAV 吗?

我已经按照本书设置了所有内容(安装程序脚本),并且运行良好。 现在我有了控制器、块和模板文件,我正在尝试显示数据库中的数据。

我的 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 文件中。我实际上应该结束这个prepareForList() 来传递currentPage 的变量

问题: 都不适合我。它没有从数据库中得到任何结果。当我使用prepareForList() 时,它说它不是对象

书中也有

    <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() 我试图获取数据但没有返回任何内容:

$blogpost = Mage::getModel('gott_news/item')->getCollection();

我应该怎么做才能让它工作???

【问题讨论】:

    标签: php magento magento-1.7 magento-1.8


    【解决方案1】:

    我之前也遇到过同样的问题,当现在使用资源时,似乎调用 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/ 以获取更多信息。如果是,但您需要再次运行设置,请删除该行。

    【讨论】:

    • 非常感谢您的回复。我读到了关于 Mysql4 方法的类似内容,实际上它说 Mysql4 方法仅在 1.7 版本之前有效。而且我还检查了这本书“Magento PHP 开发人员指南”似乎是基于 1.7 的,这就是它在那里工作但在 1.9 中不起作用的原因。我会试试你在这里写的。再次感谢您
    • 我还有一个问题:您在 xml 节点中写入和读取权限。它有什么作用?为什么需要它?你能解释一下吗?
    • 我很抱歉,但我从来没有真正想过这一点,因为没有它它的工作原理是一样的。我相信当您的模块有不同的连接类型时需要它。
    猜你喜欢
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多