我在自定义模块中创建了两个表。1)钱包2)当我加载Mage::getModel("wallets/wallets")->load();时,卖方请求正常工作。但是,当我尝试加载Mage::getModel("wallets/sellerrequest")->load();时,它会产生错误-- Can't retrieve entity config: wallets/sellerrequest,我不确定我是否可以在单个模块中完成这个任务。我是马根托的新手。这是我的config.xml文件-
<config>
<modules>
<Adept_Wallets>
<version>1.4.0</version>
</Adept_Wallets>
</modules>
<frontend>
<routers>
<wallets>
<use>standard</use>
<args>
<module>Adept_Wallets</module>
<frontName>wallets</frontName>
</args>
</wallets>
</routers>
<layout>
<updates>
<wallets>
<file>wallets.xml</file>
</wallets>
</updates>
</layout>
</frontend>
<admin>
<routers>
<wallets>
<use>admin</use>
<args>
<module>Adept_Wallets</module>
<frontName>wallets</frontName>
</args>
</wallets>
</routers>
</admin>
<global>
<models>
<wallets>
<class>Adept_Wallets_Model</class>
<resourceModel>wallets_mysql4</resourceModel>
</wallets>
<wallets_mysql4>
<class>Adept_Wallets_Model_Mysql4</class>
<entities>
<wallets>
<table>wallets</table>
</wallets>
</entities>
</wallets_mysql4>
<sellerrequest>
<class>Adept_Sellerrequest_Model</class>
<resourceModel>sellerrequest_mysql4</resourceModel>
</sellerrequest>
<sellerrequest_mysql4>
<class>Adept_Sellerrequest_Model_Mysql4</class>
<entities>
<sellerrequest>
<table>sellerrequest</table>
</sellerrequest>
</entities>
</sellerrequest_mysql4>
</models>
<resources>
<wallets_setup>
<setup>
<module>Adept_Wallets</module>
</setup>
<connection>
<use>core_setup</use>
</connection>
</wallets_setup>
<wallets_write>
<connection>
<use>core_write</use>
</connection>
</wallets_write>
<wallets_read>
<connection>
<use>core_read</use>
</connection>
</wallets_read>
</resources>
<blocks>
<wallets>
<class>Adept_Wallets_Block</class>
</wallets>
</blocks>
<helpers>
<wallets>
<class>Adept_Wallets_Helper</class>
</wallets>
</helpers>
</global>
</config>模型文件结构是-
Model -
- Sellerrequest.php
- Wallets.php
- Mysql4
- Sellerrequest.php
- Wallets.php
- Sellerrequest
- Collection.php
- Wallets
- Collection.php下面是模型目录中的Sellerrequest.php -
<?php
class Adept_Wallets_Model_Sellerrequest extends Mage_Core_Model_Abstract
{
public function _construct()
{
parent::_construct();
$this->_init('wallets/sellerrequest');
}
}Mysql4 -> Sellerrequest.php
<?php
class Adept_Wallets_Model_Mysql4_Sellerrequest extends Mage_Core_Model_Mysql4_Abstract
{
public function _construct()
{
// Note that the banners_id refers to the key field in your database table.
$this->_init('wallets/sellerrequest', 'id');
}
}Mysql4 -> Sellerrequest -> Collection.php
<?php
class Adept_Wallets_Model_Mysql4_Sellerrequest_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
{
public function _construct()
{
parent::_construct();
$this->_init('wallets/sellerrequest', 'id');
}
}我也检查过谷歌的各种解决方案,但是,我并没有搞错。wallets表的相同结构运行良好。
任何帮助都是非常感谢的!!谢谢。
发布于 2014-12-31 10:58:51
您使用的是基于config.xml的错误的模型处理程序。
你应该打电话
Mage::getModel("sellerrequest/sellerrequest")->load();而且您在模型中的_init()函数也可能有错误。
他们也应该站在sellerrequest/sellerrequest而不是wallets/sellerrequest/
您的<class>标记为模型sallerrequest可能也是错误的。
你是说:
<sellerrequest>
<class>Adept_Sellerrequest_Model</class>
<resourceModel>sellerrequest_mysql4</resourceModel>
</sellerrequest>这意味着Magento将查看app/code/local/Adept/Sellerrequest/Model/文件夹。
因此,当您的模型文件状态为Adept_Wallets_Model_时,它们必须位于app/code/local/Adept/Wallets/Model文件夹中。
事实上,在马根托的做事方式中,这个宣言是完全错误的。因为使用行<class>Adept_Sellerrequest_Model</class>,您正在声明模块Adept_Wallets的模型位于另一个模块中:Adept_Sellerrequest,它可以工作,但我根本不能建议您这样做。
但是,如果您真的希望您的模块变得清晰,下面是它们在Magento核心文件中的实现方式:
在您的配置XML文件中:
<config>
<modules>
<Adept_Wallets>
<version>1.4.0</version>
</Adept_Wallets>
</modules>
<frontend>
<routers>
<wallets>
<use>standard</use>
<args>
<module>Adept_Wallets</module>
<frontName>wallets</frontName>
</args>
</wallets>
</routers>
<layout>
<updates>
<wallets>
<file>wallets.xml</file>
</wallets>
</updates>
</layout>
</frontend>
<admin>
<routers>
<wallets>
<use>admin</use>
<args>
<module>Adept_Wallets</module>
<frontName>wallets</frontName>
</args>
</wallets>
</routers>
</admin>
<global>
<models>
<wallets>
<class>Adept_Wallets_Model</class>
<resourceModel>wallets_mysql4</resourceModel>
</wallets>
<wallets_mysql4>
<class>Adept_Wallets_Model_Mysql4</class>
<entities>
<wallets>
<table>wallets</table>
</wallets>
<!-- the table to connect to seller request is here -->
<sellerrequest>
<table>sellerrequest</table>
</sellerrequest>
</entities>
</wallets_mysql4>
<!-- do not use two models definition -->
<!-- sellerrequest>
<class>Adept_Sellerrequest_Model</class>
<resourceModel>sellerrequest_mysql4</resourceModel>
</sellerrequest>
<sellerrequest_mysql4>
<class>Adept_Sellerrequest_Model_Mysql4</class>
<entities>
<sellerrequest>
<table>sellerrequest</table>
</sellerrequest>
</entities>
</sellerrequest_mysql4 -->
</models>
<resources>
<wallets_setup>
<setup>
<module>Adept_Wallets</module>
</setup>
<connection>
<use>core_setup</use>
</connection>
</wallets_setup>
<wallets_write>
<connection>
<use>core_write</use>
</connection>
</wallets_write>
<wallets_read>
<connection>
<use>core_read</use>
</connection>
</wallets_read>
</resources>
<blocks>
<wallets>
<class>Adept_Wallets_Block</class>
</wallets>
</blocks>
<helpers>
<wallets>
<class>Adept_Wallets_Helper</class>
</wallets>
</helpers>
</global>
</config>然后,,,您可以使用Mage::getModel('wallets/sellerrequest')和,也可以将您的类名在Adept_Wallets_Model_(...)中表示为sellerrequest是正确的。
关于Magento模型的一点解释
Mage::getModel("module_handler/path_to_class");这是Magento获得它的模型的方法,但在使用Mage::getBlockSingleton()、Mage::helper()或Mage::getSingleton()时也适用于块,
那么,这个module_handler和path_to_class对应的是什么,以及Magento如何在正确的文件夹中找到正确的类?
从一开始到最后:
首先,您在这里请求一个模型,因为您调用了Mage::getModel(),所以Magento将解析所有模块的config.xml,以找到一个带有处理程序:module_handler的模块。
所以,在您的config.xml中应该有如下所示
<config>
<!--
the line above means that
we are going to add something to the global config
-->
<global>
<!--
the line above means we are going to add something
which can be accessed by both fronted and backend elements
-->
<models>
<!--
the line above means that
we are going to add a model to the existing models
-->
<module_handler>
<!--
the line above means that
our new model have the handler module_handler
-->
<class>Company_Module_Model</class>
<!--
the line above states
where the files of this model are located
-->
<!-- some declaration should come here -->
</module_handler>
<models>
</global>
</config> 好的,现在Magento可以进入您的类了:它知道调用module_handler/path_to_class必须映射到Company_Module_Model_Path_To_Class,后者在Company/Module/Model/Path/ to /Class.php中转换文件。
为了进一步理解,它知道,基于app/etc/ Module /Company_Module.xml中的文件,该模块文件的位置是因为您声明了如下内容:
<config>
<modules>
<Company_Module>
<active>true</active>
<codePool>local</codePool>
<depends/>
</Company_Module>
</modules>
</config>因此,它知道它是一个本地模块,它将查找app/code/__local.中的文件夹。
所以,您的文件在app/code/local/Company/Module/Model/Path/To/Class.php.中
同样,如果您调用一个更简单的Mage::getModel('module_handler/class'),它知道文件在Mage::getModel('module_handler/class')中。
https://stackoverflow.com/questions/27719706
复制相似问题