我在自定义模块中创建了两个表。 1)钱包2)卖家请求
当我加载Mage::getModel("wallets/wallets")->load();
时,它正常工作。但是当我尝试加载Mage::getModel("wallets/sellerrequest")->load();
时,它会出错 - Can't retrieve entity config: wallets/sellerrequest
我不确定我是否可以在单个模块中执行此操作。我是magento的新手。
这是我的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 - &gt; 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 - &gt; Sellerrequest - &gt; 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');
}
}
我已经在google上检查了各种解决方案,但是,我没有得到我做错了什么。
wallets
表的相同结构工作正常。
任何帮助都是高度赞赏的!! 感谢。
答案 0 :(得分:1)
您使用的是基于config.xml的错误模型处理程序。 你应该打电话给
Mage::getModel("sellerrequest/sellerrequest")->load()
模型中的_init()函数也可能有问题 他们还应该站在 sellerrequest / sellerrequest 而不是钱包/卖家请求
您的模型sallerrequest的<class>
标记也可能是错误的。
你说:
<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 /...
事实上,这个宣言是以Magento的方式做事,完全错了。因为使用行<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 now 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>
然后您可以在Adept_Wallets_Model _(...)中使用Mage::getModel('wallets/sellerrequest')
和然后您的类名,以获得卖家请求。
关于Magento模型的一点解释
Mage::getModel("module_handler/path_to_class")
这就是Magento如何获得他的模型,但是当使用Mage :: getBlockSingleton()或Mage :: helper()或Mage :: getSingleton()时,这也适用于块,...
那么这个module_handler和path_to_class对应的是什么,以及Magento如何到达你可能会问的正确文件夹中的正确类?
这里从0到结束:
首先想到,首先你在这里请求一个Model,因为你调用了Mage :: getModel(),所以Magento将解析所有模块的所有config.xml,以找到一个带有handler:module_handler的模块。
所以在你的config.xml中应该有类似
的东西<config>
<!-- this above line means we are going to add something to the global config -->
<global>
<!-- this above line means we are going to add something which can be accessed by both fronted and backend elements -->
<models>
<!-- this above line means we are going to add a model to the existing models -->
<module_handler>
<!-- this above line means our new model have the handler module_handler -->
<class>Company_Module_Model</class>
<!-- this above line states where are the files of this model -->
<!-- some declaration should come here -->
</module_handler>
<models>
</global>
</config>
好的,现在Magento可以进入你的班级:它知道调用 module_handler / path_to_class必须映射到Company_Module_Model_Path_To_Class到公司/模块/模型/路径/ To / Class.php中的文件
为了进一步理解,它知道,根据app / etc / modules / 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') 它知道该文件位于app / code / local / Company / Module / Model / Class.php
中