2014-12-31 2 views
0

Я создал две таблицы в своем настраиваемом модуле. 1) кошельки 2) sellerrequest При загрузке Mage::getModel("wallets/wallets")->load(); он работает правильно. Но когда я пытаюсь загрузить Mage::getModel("wallets/sellerrequest")->load();, он дает ошибку - Can't retrieve entity config: wallets/sellerrequest Я не уверен, могу ли я сделать это в одном модуле или нет. Я новичок в magento. Вот мой config.xml файл -magento - Не удается получить конфигурацию сущности

<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'); 
    } 
} 

Я проверил различные решения на Google, а также, но я не получаю то, что я делаю неправильно. Такая же конструкция для стола wallets работает нормально.

Любая помощь будет высоко оценена !! Спасибо.

ответ

1

Вы используете неправильный обработчик модели, основанный на вашем config.xml. Вы должны позвонить

Mage::getModel("sellerrequest/sellerrequest")->load() 

И ваша функция _init() в моделях также могут быть неисправны Они также должны стоять sellerrequest/sellerrequest вместо кошельков/sellerrequest

И ваш <class> тег для модели sallerrequest может быть и неправильным. Вы состояние:

<sellerrequest> 
    <class>Adept_Sellerrequest_Model</class> 
    <resourceModel>sellerrequest_mysql4</resourceModel> 
</sellerrequest> 

Это означает, Magento будет смотреть на приложение/код/​​местные/Адепт/Sellerrequest/модель/... Где ваш файл модели состояния они 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> 

ТОГДА вы можете использовать Mage::getModel('wallets/sellerrequest') и , то ваши имена классов в Adept_Wallets_Model _ (...) для sellerrequest являются правильными.

Небольшое пояснение о моделях в Magento

Mage::getModel("module_handler/path_to_class") 

Это как Magento получить свою модель, но это также работает для блоков при использовании Mage :: getBlockSingleton() или Mage :: помощник() или Mage: : getSingleton(), ...

Итак, что это за классный_модуль и path_to_class соответствуют тому, как Magento попадает в нужный класс в правой папке, которую вы можете задать?

Вот он идет от 0 до конца:

Первый думает, что пришел первым вы здесь спрашиваете модель, потому что вы называете Mage :: getModel(), так что Magento будет анализировать все config.xml из всех модулей, чтобы найти модуль с обработчиком: 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 делает к файл в Company/Module/Model/Path/To/Class.php

И для дальнейшего понимания он знает, основываясь на файле в файле/etc/modules/Company_Module.xml, где эти файлы модуля, потому что вы заявили что-то как:

<config> 
    <modules> 
     <Company_Module> 
      <active>true</active> 
      <codePool>local</codePool> 
      <depends/> 
     </Company_Module> 
    </modules> 
</config> 

Так что знает, что это локальный модуль, так что это будет выглядеть в папку приложения/код/​​местного Так что ваш файл в приложение/код/​​местные/Компания/модуль/модель/Path /To/Class.php

то же, если вы звоните простой Mage :: getModel ('module_handler/класс') он знает, что файл в приложение/код/​​местные/Компания/модуль/модель/Class.php

+0

Спасибо за рекомендации. Я внес изменения, но теперь он дает фатальную ошибку, Fatal error: вызов функции-функции участника() для не-объекта в app/code/local/Adept/кошельки/контроллеры/IndexController.php в строке 19 – SandyK

+0

@SandyK: я отредактировал свой ответ, ваш узел в config xml тоже может быть неправильным. –

+0

Очень спасибо. он отлично работает. – SandyK

Смежные вопросы