Magento:致命错误:在非对象上调用成员函数load()

时间:2014-03-27 14:34:49

标签: php xml magento magento-1.12

我正在创建自己的模块,一切顺利,直到我开始创建自己的模型。

我试图查询我已添加的数据库表(其中包含数据),我想要做的就是打印数据。

当我查看调用模块的页面时,我收到以下消息

  

致命错误:在非对象上调用成员函数load()

在这一行

$model = Mage::getResourceModel('facebooklikediscount/facebookcoupon')->load(1);

这是我的config.xml(模型部分)

<models>
    <mymodule_facebooklikediscount>
        <class>MyModule_FacebookLikeDiscount_Model</class>
        <resourceModel>mymodule_facebooklikediscount_resource</resourceModel>
    </mymodule_facebooklikediscount>
    <mymodule_facebooklikediscount_resource>
        <class>MyModule_FacebookLikeDiscount_Model_Resource</class>
        <deprecatedNode>mymodule_facebooklikediscount_mysql4</deprecatedNode>
        <entities>
            <facebookcoupon>
                <table>salesrule_coupon_facebook</table>
            </facebookcoupon>
        </entities>
    </mymodule_facebooklikediscount_resource>
</models>

我的模特

<?php

class MyModule_FacebookLikeDiscount_Model_Facebookcoupon extends Mage_Core_Model_Abstract
{
    protected function _construct()
    {
        $this->_init('facebooklikediscount/facebookcoupon');
    }
}

资源模型

<?php

class MyModule_FacebookLikeDiscount_Model_Resource_Facebookcoupon extends Mage_Core_Model_Resource_Db_Abstract
{
    protected $_storeId;

    protected function _construct()
    {
        $this->_init('facebooklikediscount/facebookcoupon', 'entity_id');
        $this->_storeId = (int)Mage::app()->getStore()->getId();
    }

    public function getData($entityId)
    {
        $resource = Mage::getSingleton('core/resource');
        $select = $resource->getConnection('core_read')->select();
        $select
            ->from($this->getTable(array('facebooklikediscount/facebookcoupon', $this->_storeId)), '*')
            ->where('entity_id = :entity_id');

        $result = $resource->getConnection('core_read')->fetchAll($select, array('entity_id' => $entityId));

        return $result;
    }
}

4 个答案:

答案 0 :(得分:0)

您应该像这样创建模型实例

$model = Mage::getModel('mymodule_facebooklikediscount/facebookcoupon')->load(1);

使用getModel代替getResourceModel 传递给getModel的参数由2部分组成 斜杠前面的部分是您在config.xml标记下的models中添加的标记名称。在您的情况下mymodule_facebooklikediscount

第二部分是您实例化的类名的小写字符串,您可以从中删除在模型的<class>标记中添加的内容。

因此,如果类名为MyModule_FacebookLikeDiscount_Model_Facebookcoupon且您在config.xml class>MyModule_FacebookLikeDiscount_Model</class>中有,则第二部分为facebookcoupon

答案 1 :(得分:0)

尝试调用getCollection()方法:

$model = Mage::getModel('facebooklikediscount/facebookcoupon')->getCollection()->load(1);

答案 2 :(得分:0)

模型代码应该是

$model = Mage::getModel('mymodule_facebooklikediscount/facebookcoupon')->load(1);

资源确实有load()函数

$model = Mage::getResourceModel('mymodule_facebooklikediscount/facebookcoupon')->load();

再次

    resource model load() function is loading total records.It is did not load 
by primary key 

单个记录使用

      $model = Mage::getModel('mymodule_facebooklikediscount/facebookcoupon')
->load($primary_key);

模型&gt; Facebookcoupon.php代码应该是 来自

protected function _construct()
    {
        $this->_init('facebooklikediscount/facebookcoupon');
    }
to 
protected function _construct()
    {
        $this->_init('mymodule_facebooklikediscount/facebookcoupon');
    }

model&gt; resource&gt; facebookcoupon.php应为

 protected function _construct()
    {
        $this->_init('mymodule_facebooklikediscoun/facebookcoupon', 'entity_id');
        $this->_storeId = (int)Mage::app()->getStore()->getId();
    }

答案 3 :(得分:0)

由于您收到错误&#34;致命错误:在非对象上调用成员函数load()&#34;如果您没有正确设置模型集合,则会出现该错误。 load函数查找模型资源 - 然后需要模型集合。

查找如何设置资源和集合:

http://www.pixafy.com/blog/2013/04/creating-a-magento-custom-model/