2012-01-05 97 views
0

我已经创建了一个自定义模块来创建自定义数据库表。我一直在关注Alan Storm的教程http://alanstorm.com/magento_setup_resourceshttp://alanstorm.com/magento_models_orm以创建自定义数据库表。在Magento中找不到自定义数据库表

我的模块条目显示在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安装,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(); 

我已经尝试了各种调试方法,但我没有得到任何异常,也没有发生错误。我应该怎么做才能让我的表格真正显示在数据库中?

+0

这里没有足够的信息。我们至少需要你的'sql /'文件夹的内容。 – Nick 2012-01-05 17:46:25

+0

我编辑了这个问题。请看看,让我知道如果有帮助。 – ivn 2012-01-05 18:02:35

+0

删除'core_resource'表中的条目以使安装脚本再次运行。 – clockworkgeek 2012-01-05 18:19:09

回答

2

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

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

警告:simplexml_load_string()[function.simplexml-load-string]:实体:第4行:解析器错误:错误解析用C属性名称:\ Program Files文件\ Zend的\ Apache2的\ htdocs中\ local.pruebas.com \ LIB \瓦瑞恩\ SimpleXML的\ config.php文件上线510 ......

那么,它的时间来调试 1.首先:去应用的/ etc/Ajzele_SimpleModel和力量,错误,例如:

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

你应该看到的错误。

2。第二:去应用程序/代码/本地/ 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

这不是具体的答案,但我认为你可以看到与此解决方案。 谢谢,对不起,我inglish

+0

试过我们的调试方法,但它只是说它找不到我的当我的脚本在sql/simplemodel_setup文件夹中正确时,安装程​​序脚本。有关为什么找不到我的安装程序脚本的任何想法? – ivn 2012-01-06 10:04:14

+0

您使用Magento 1.6.1 rigth? – davidselo 2012-01-06 15:01:22

+0

是的1.6.1 .. – ivn 2012-01-06 15:09:40

0

我用你的结构创建了一个简单模块,并且setup资源脚本正确运行。您可以看到该模块here。对比你的模块,一旦你在安装脚本中引发异常,开始逐行调试你的SQL。

+0

我尝试了一行一行地调试我的SQL,并且还在MySQL查询窗口中运行了sql查询跑得很好。我认为它只是因为某种原因,无法找到我的安装程序脚本,每当我第一次运行我的模块时都会发生这种情况。在创建新表之前是否有任何特定步骤遗漏? – ivn 2012-01-06 10:17:04

+0

我跟着你的文章http://alanstorm.com/magento_setup_resources,每一件事都很好,直到你检查升级脚本是否运行正常。我从来没有收到'正在运行升级.....'的信息 – ivn 2012-01-06 16:59:06

+0

另外,如果我然后手动删除core_resource表中的行,然后添加实际的'CREATE table'脚本并重新加载页面,我不断收到错误页面。直到我去手动添加行。但是,我的桌子没有出现 – ivn 2012-01-06 17:00:13

0

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

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

+0

我试过把你的死(__ FILE__);并从模块中删除行,但我只是得到一个错误页面,其中的报告说它找不到我的simplemodel_setup。 – ivn 2012-01-06 10:18:15

+0

您的安装类是否具有Ajzele_SimpleModel_Model_Mysql4_Setup的类名,并位于app/code/local/Ajzele/SimpleModel/Model/Mysql4/Setup.php中? – 2012-01-06 10:57:45

+0

是的,它有正确的课程名称和正确的位置。我想知道如何开始创建一个模块n,然后再一步一步地使用不同的模块名称。只是为了确保我不会错过任何事情。并会将Setup.php强制创建呢? – ivn 2012-01-06 11:16:14

1

你可以尝试用这种方式来定义:

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

后来又放在yourmodule/SQL/selo_modulo1_setup /安装-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(); 

而对于鸵鸟政策犯的错误我的协议作出扩展复制/粘贴代码操作系统的核心和调整我使用了类似的模块。

Regards david

+0

那么只需要用你的代码改变资源部分和安装脚本?但是需要更改,因为您提到的表名与我的不同? – ivn 2012-01-06 15:22:46