magento - 无法检索实体配置

时间:2014-12-31 10:21:34

标签: magento

我在自定义模块中创建了两个表。 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表的相同结构工作正常。

任何帮助都是高度赞赏的!! 感谢。

1 个答案:

答案 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