我正在创建自己的模块,一切都很顺利,直到我开始创建自己的模型。
我试图查询一个数据库表,我已经添加(其中有数据),所有我想做的就是打印数据。
当我查看调用模块的页面时,我得到以下消息
致命错误:调用非对象的成员函数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;
}
}
您应该像这样创建模型实例
$model = Mage::getModel('mymodule_facebooklikediscount/facebookcoupon')->load(1);
用getModel
代替getResourceModel
。
传递给getModel
的参数由2部分组成。
斜杠之前的部分是您在models
标签下在config.xml
中添加的标签名称。在你的情况下,mymodule_facebooklikediscount
。
第二部分是您正在实例化的类名的小写字符串,您将从中删除添加在模型<class>
标记中的内容。
如果类名是MyModule_FacebookLikeDiscount_Model_Facebookcoupon
在config。xml中是class>MyModule_FacebookLikeDiscount_Model</class>
那么第二部分就是facebookcoupon
尝试调用getCollection()方法:
$model = Mage::getModel('facebooklikediscount/facebookcoupon')->getCollection()->load(1);
模型代码应该是
$model = Mage::getModel('mymodule_facebooklikediscount/facebookcoupon')->load(1);
And Resource has may load() function
$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);
Model>Facebookcoupon.php代码应该是从
protected function _construct()
{
$this->_init('facebooklikediscount/facebookcoupon');
}
to
protected function _construct()
{
$this->_init('mymodule_facebooklikediscount/facebookcoupon');
}
model>resource>facebookcoupon.php应该是
protected function _construct()
{
$this->_init('mymodule_facebooklikediscoun/facebookcoupon', 'entity_id');
$this->_storeId = (int)Mage::app()->getStore()->getId();
}
由于您得到错误"致命错误:在非对象上调用成员函数load() ",如果您没有正确设置模型集合,则会出现该错误。load函数查找模型资源——然后需要模型收集。
查找如何设置资源和集合:
http://www.pixafy.com/blog/2013/04/creating-a-magento-custom-model/