请!!!我已经坚持了这个问题大约一个月。
我原来的问题是Mage::getResourceModel()
返回false。我尝试了一切并且无法成功。
然后我开始追踪与getResourceModel()
函数相关的核心类。
我最终使用Config.php _getResourceModelFactoryClassName()
函数,该函数从$this->_xml->global->models object
读取XML。
我var_dump该XML并发现其他模块具有_resource
属性,但我的模块没有。
["weee"]=>
object(Mage_Core_Model_Config_Element)#143 (2) {
["class"]=>
string(15) "Mage_Weee_Model"
["resourceModel"]=>
string(13) "weee_resource"
}
["weee_resource"]=>
object(Mage_Core_Model_Config_Element)#144 (3) {
["class"]=>
string(24) "Mage_Weee_Model_Resource"
["deprecatedNode"]=>
string(11) "weee_mysql4"
["entities"]=>
object(Mage_Core_Model_Config_Element)#150 (2) {
["tax"]=>
object(Mage_Core_Model_Config_Element)#175 (1) {
["table"]=>
string(8) "weee_tax"
}
["discount"]=>
object(Mage_Core_Model_Config_Element)#172 (1) {
["table"]=>
string(13) "weee_discount"
}
}
}
["module"]=>
object(Mage_Core_Model_Config_Element)#146 (2) {
["class"]=>
string(12) "Namespace_Module_Model"
["resourceModel"]=>
string(11) "module_resource"
}
在上面的代码中,["模块"]是我的自定义模块,并没有像[" weee_resource"]
那样带来它的资源<global>
<models>
<module>
<class>Namespace_Module_Model</class>
<resourceModel>module_resource</resourceModel>
</module>
</models>
<module_resource>
<class>Namespace_Module_Model_Resource</class>
<deprecatedNode>cb_mysql4</deprecatedNode>
<entities>
<payment>
<table>acs_transaction</table>
</payment>
</entities>
</module_resource>
感谢。
答案 0 :(得分:0)
config.xml中没有module_resource NODE
</models>
<module_resource>
这个宣言是错误的 您的modules_resource需要在模型节点
下<global>
<models>
<your_module>
<class>Namespace_Module_Model</class>
<resourceModel>your_module_resource</resourceModel>
</your_module>
<your_module_resource >
<class>Namespace_Module_Model_Resource</class>
<deprecatedNode>cb_mysql4</deprecatedNode>
<entities>
<payment>
<table>acs_transaction</table>
</payment>
</entities>
</your_module_resource >
</models>
之后,您可以在
中定义资源和数据库表<global>
<resources>
节点
答案 1 :(得分:0)
要获取Collection,您还需要通过Model配置来定义它。简单地说你需要3个文件:
Mynamespace/Mymodule/Model/Mymodel.php
Mynamespace/Mymodule/Model/Resource/MyModel.php
Mynamespace/Mymodule/Model/Resource/MyModel/Collection.php
Mynamespace / Mymodule / Model / Mymodel.php需要实现_init()方法并指向正确的资源模型;
class Mynamespace_Mymodule_Model_MyModel
extends Mage_Core_Model_Abstract {
public function _construct() {
$this->_init('mymodule/mymodel');
}
}
然后在Mynamespace / Mymodule / Model / Resource / Mymodel.php需要指向正确的资源(table或eav)
class Mynamespace_Mymodule_Model_Resource_Mymodel
extends Mage_Core_Model_Resource_Db_Abstract
{
public function _construct() {
$this->_init('mymodule/mymodel', 'entity_id'); // entity_id - autoincrement column
}
}
,您需要的最后一个文件是
Mynamespace / Mymodule / Model / Resource / Mymodel / Collection.php文件
class Mynamespace_Mymodule_Model_Resource_Mymodel_Collection
extends Mage_Core_Model_Resource_Db_Collection_Abstract
{
public function _construct() {
$this->_init('mymodule/mymodel');
}
}
如果你想测试它,只需创建一个test.php文件并运行
var_dump(get_class(Mage::getModel('mymodule/mymodel'));
var_dump(get_class(Mage::getResourceModel('mymodule/mymodel'));
var_dump(get_class(Mage::getModel('mymodule/mymodel')->getCollection());
如果你得到3个班级名字,你就可以去了。