Не могу найти пользовательскую таблицу базы данных в Magento - PullRequest
0 голосов
/ 05 января 2012

Я создал пользовательский модуль, который создает пользовательскую таблицу базы данных. Я следовал инструкциям Alan Storm http://alanstorm.com/magento_setup_resources и http://alanstorm.com/magento_models_orm для создания пользовательских таблиц базы данных.

Моя запись модуля отображается в таблице core_resource, но фактическая запись не отображается.

Это мой код config.xml

<?xml version="1.0"?>
<config>
 <modules>
    <Ajzele_SimpleModel>
        <version>0.0.1</version>
    </Ajzele_SimpleModel>
</modules>
<global>

  <models>
   <simplemodel>
     <class>Ajzele_SimpleModel_Model</class>
     <resourceModel>simplemodel_mysql4</resourceModel>      
   </simplemodel>

   <simplemodel_mysql4>
     <class>Ajzele_SimpleModel_Model_Mysql4</class>
      <entities>
          <simplemodel>
                  <table>simplemodel</table>
           </simplemodel>
       </entities>                
   </simplemodel_mysql4>  

 </models>

 <resources>
        <simplemodel_setup>
            <setup>
                <module>Ajzele_SimpleModel</module>
       <class>Ajzele_SimpleModel_Model_Mysql4_Setup</class>
            </setup>

            <connection>
                <use>core_setup</use>
            </connection>

        </simplemodel_setup>

        <simplemodel_read>
            <connection>
                <use>core_read</use>
            </connection>
        </simplemodel_read>  

        <simplemodel_write>
            <connection>
                <use>core_write</use>
            </connection>
        </simplemodel_write>  

</resources>        
</global>    
    </config>

И моя модель файла структуры

   Model
     SimpleModel.php
     Mysql4
       SimpleModel.php
       Setup.php
       SimpleModel
          Collection.php

Вот содержимое моего sql / simplemodel_setup / mysql4-install-0.0.1.php

     <?php

    $installer = $this;

   $installer->startSetup();

   $baseTableName = 'simplemodel';

   $sql = "
   SET FOREIGN_KEY_CHECKS=0;
   -- ----------------------------
   -- Table structure for `simplemodel`
   -- ----------------------------
   DROP TABLE IF EXISTS {$this->getTable($baseTableName)};
   CREATE TABLE {$this->getTable($baseTableName)} (
    `simplemodel_id` int(11) NOT NULL AUTO_INCREMENT,
    `field1` varchar(255) DEFAULT NULL,
    `field2` varchar(255) DEFAULT NULL,
     PRIMARY KEY (`simplemodel_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    ";

    $installer->run($sql);

    $installer->endSetup();

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

Ответы [ 4 ]

2 голосов
/ 06 января 2012

Я рекомендую вам перевести Magento в режим разработчика и отладить трассировку XML для проверки XML. Для настройки Magento в режиме разработчика вы должны поместить переменную MAGE_IS_DEVELOPER_MODE в определение виртуального хоста или в .htaccess корня Magento. Например, в виртуальном хосте:

<VirtualHost *:80>
   DocumentRoot "C:\Program Files\Zend\Apache2/htdocs/local.pruebas.com"
   ServerName local.pruebas.com
   DirectoryIndex index.html index.php index.htm
   SetEnv MAGE_IS_DEVELOPER_MODE "1"    
   <Directory "C:\Program Files\Zend\Apache2/htdocs/local.pruebas.com">
       AllowOverride All
       Options All
       Order allow,deny
       Allow from all
   </Directory>

позже вы должны изменить index.php в строке 66 и поставить

if (isset($_SERVER['MAGE_IS_DEVELOPER_MODE'])) {
Varien_Profiler::enable();
    Mage::setIsDeveloperMode(true);
    ini_set('display_errors', 1);
 }

Varien_Profiler :: включить (); и ini_set ('display_errors', 1); вне условного я думаю за ошибку. Теперь вы не видите ошибку simplexml_load_string (), если в XML есть ошибка:

Предупреждение: simplexml_load_string () [function.simplexml-load-string]: Сущность: строка 4: ошибка синтаксического анализатора: ошибка синтаксического анализа имени атрибута в C: \ Program Files \ Zend \ Apache2 \ htdocs \ local.pruebas.com \ lib \ Varien \ Simplexml \ Config.php в строке 510 ......

тогда пришло время отлаживать 1.first: перейдите в приложение / etc / Ajzele_SimpleModel и введите force и error, например:

<config>
     <modules>
        <Ajzele_SimpleModel <!--remove a '>' to force an error-->
           <active>true</active>
           <codePool>local</codePool>
        </Ajzele_SimpleModel>
     </modules>
</config>

вы должны увидеть ошибку.

2.секунд: перейдите в app / code / local / Ajzele / SimpleModel / etc / config.xml и повторите процесс

<config>
    <modules>
      <Ajzele_SimpleModel <!-- remove a '>' to verify that you load correctly your extension 
          <version>0.0.1</version>
      </Ajzele_SimpleModel>
    </modules>
    <global>

      <models>
          <simplemodel>
               <class>Ajzele_SimpleModel_Model</class>
                  <resourceModel>simplemodel_mysql4</resourceModel>      
          </simplemodel>
      </models>
     </global>
 </config>

Если у вас нет простой ошибки XML в этом пункте, вы неправильно загружаете свое расширение, и следующий шаг - отладка и отладка config.xml

Это не конкретный ответ, но я думаю, что с этим вы можете увидеть решение. спасибо, извините за мой английский

1 голос
/ 06 января 2012

Вы можете попытаться определить таким образом:

<resources>
        <selo_modulo1_setup>
            <setup>
                <module>Selo_Modulo1</module>
            </setup>
        </selo_modulo1_setup>
    </resources>

И позже поместите в ваш модуль / sql / selo_modulo1_setup / install-1.6.0.0.php и пример установочного скрипта:

<?php
die('All right');

/* @var $installer Mage_Core_Model_Resource_Setup */
$installer = $this;
$installer->startSetup();
/**
 * Create table 'poll'
 */
$table = $installer->getConnection()
    ->newTable($installer->getTable('selo_modulo1/blog_post'))
    ->addColumn('post_id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array(
        'identity'  => true,
        'unsigned'  => true,
        'nullable'  => false,
        'primary'   => true,
        ), 'Post Id')
    ->addColumn('title', Varien_Db_Ddl_Table::TYPE_TEXT, 255, array(
        ), 'Post title')
    ->addColumn('content', Varien_Db_Ddl_Table::TYPE_TEXT, 1024, array(
        ), 'Post content')
    ->setComment('Blog_post');//Comentario de la tabla.
$installer->getConnection()->createTable($table);

$installer->endSetup();

И чтобы не допускать ошибок, мой протокол к сделанному расширению - скопировать / вставить код или аналогичный модуль ядра и настроить его для моего использования.

С уважением, Дэвид

0 голосов
/ 06 января 2012

Поместите оператор die(__FILE__); в верхней части скрипта установки, удалите строку для вашего модуля из core_resources, rm -rf var / cache / mage - * затем зайдите на ваш сайт в браузере, вы должны получить имя файлавашего файла.Если вы удалите оператор die, и все будет хорошо.

Я предполагаю, что Magento запустил обновление, когда в вашем файле не было кода для создания таблицы.После увеличения версии в core_resources сценарий установки не будет перезапущен.

0 голосов
/ 05 января 2012

Я создал простой модуль с вашей структурой, и скрипт ресурса установки работал правильно. Вы можете видеть этот модуль здесь . Отличайтесь от вашего модуля, и как только вы получите исключение в сценарии установщика, начните отладку SQL построчно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...