在Magento中找不到自定义数据库表

时间:2012-01-05 17:42:39

标签: php zend-framework magento

我创建了一个自定义模块,用于创建自定义数据库表。我一直在关注Alan Storm的教程http://alanstorm.com/magento_setup_resourceshttp://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 个答案:

答案 0 :(得分:2)

我建议您将Magento置于开发人员模式并调试XML跟踪以检查XML。要在开发人员模式下配置Magento,您应该将变量MAGE_IS_DEVELOPER_MODE放在虚拟主机的定义中或Magento根目录的.htaccess中。 例如在de virtual host中:

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

稍后您应修改第66行中的index.php并输入

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);超出条件我认为是错误的。 现在,您无法看到XML中出现错误的simplexml_load_string()错误:

警告:simplexml_load_string()[function.simplexml-load-string]:实体:第4行:解析器错误:在C:\ Program Files \ Zend \ Apache2 \ htdocs \ local.pruebas.com \ lib中解析属性名称时出错第510行的Varien \ Simplexml \ Config.php ......

然后,它的调试时间 1.first:转到app / etc / Ajzele_SimpleModel并强制和错误,例如:

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

你应该看到错误。

2.second:转到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 :(得分:1)

你能尝试用这种方式定义:

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

后来放入yourmodule / 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();

对于不提交错误,我的扩展协议是复制/粘贴代码,类似于核心模块并调整供我使用。

关心大卫

答案 2 :(得分:0)

我使用您的结构创建了一个简单模块,并且设置资源脚本正确运行。您可以看到该模块here。 Diff与您的模块,一旦您在安装程序脚本中抛出异常,就开始逐行调试SQL。

答案 3 :(得分:0)

在安装脚本的顶部放置一个die(__FILE__);语句,从core_resources中删除模块的行,rm -rf var / cache / mage - *然后在浏览器中访问您的站点,您应该得到您的文件的文件名。如果你确实删除了死亡陈述,那么你应该好好去。

我的猜测是,当您的文件不包含创建表的代码时,Magento会进行升级。一旦版本在core_resources中递增,安装脚本将不会重新运行。