首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >magento -无法检索实体配置

magento -无法检索实体配置
EN

Stack Overflow用户
提问于 2014-12-31 10:21:33
回答 1查看 1.3K关注 0票数 1

我在自定义模块中创建了两个表。1)钱包2)当我加载Mage::getModel("wallets/wallets")->load();时,卖方请求正常工作。但是,当我尝试加载Mage::getModel("wallets/sellerrequest")->load();时,它会产生错误-- Can't retrieve entity config: wallets/sellerrequest,我不确定我是否可以在单个模块中完成这个任务。我是马根托的新手。这是我的config.xml文件-

代码语言:javascript
复制
<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>

模型文件结构是-

代码语言:javascript
复制
Model - 
       - Sellerrequest.php
       - Wallets.php
       - Mysql4
         - Sellerrequest.php
         - Wallets.php
         - Sellerrequest
            - Collection.php
         - Wallets
            - Collection.php

下面是模型目录中的Sellerrequest.php -

代码语言:javascript
复制
<?php

class Adept_Wallets_Model_Sellerrequest extends Mage_Core_Model_Abstract
{
    public function _construct()
    {
        parent::_construct();
        $this->_init('wallets/sellerrequest');
    }
}

Mysql4 -> Sellerrequest.php

代码语言:javascript
复制
<?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

代码语言:javascript
复制
<?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表的相同结构运行良好。

任何帮助都是非常感谢的!!谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-31 10:58:51

您使用的是基于config.xml的错误的模型处理程序。

你应该打电话

代码语言:javascript
复制
Mage::getModel("sellerrequest/sellerrequest")->load();

而且您在模型中的_init()函数也可能有错误。

他们也应该站在sellerrequest/sellerrequest而不是wallets/sellerrequest/

您的<class>标记为模型sallerrequest可能也是错误的。

你是说:

代码语言:javascript
复制
<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文件中:

代码语言:javascript
复制
<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模型的一点解释

代码语言:javascript
复制
Mage::getModel("module_handler/path_to_class");

这是Magento获得它的模型的方法,但在使用Mage::getBlockSingleton()Mage::helper()Mage::getSingleton()时也适用于块,

那么,这个module_handlerpath_to_class对应的是什么,以及Magento如何在正确的文件夹中找到正确的类?

从一开始到最后:

首先,您在这里请求一个模型,因为您调用了Mage::getModel(),所以Magento将解析所有模块的config.xml,以找到一个带有处理程序:module_handler的模块。

所以,在您的config.xml中应该有如下所示

代码语言:javascript
复制
<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中的文件,该模块文件的位置是因为您声明了如下内容:

代码语言:javascript
复制
<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')中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27719706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档