mysql - 无法在 magento 模块中创建表

标签 mysql sql magento magento-1.9

我是magento的新手。我想创建一个简单的模块。找了一篇文章,开始写代码。有一部分如何在 magento modul 中创建表,所以我尝试了,但我做不到。 ?我有 config.xml 文件:

<?xml version="1.0" ?>
     <config>
         <modules>
             <DS_News>
                 <version>0.0.1</version>
             </DS_News>
         </modules>
    <frontend>
        <layout>
            <updates>
                <dsnews>
                    <file>ds_news.xml</file>
                </dsnews>
            </updates>
        </layout>
        <routers>
            <dsnews>
                <use>standard</use>
                <args>
                    <module>DS_News</module>
                    <frontName>news</frontName>
                </args>
            </dsnews>
        </routers>
    </frontend>
    <global>
        <models>
            <dsnews>
                <resourceModel>dsnews_resource</resourceModel>
            </dsnews>
            <dsnews_resource>
                <entities>
                    <table_news>
                        <table>ds_news_entities</table>
                    </table_news>
                </entities>
            </dsnews_resource>
        </models>
        <resources>
            <dsnews_setup>
                <setup>
                    <module>DS_News</module>
                </setup>
            </dsnews_setup>
        </resources>
    </global>
</config>

并且有这样的 install-0.0.1.php 文件:
<?php
       $installer = $this;
       $tableNews = $installer->getTable('dsnews/table_news');
       $installer->startSetup();
       $connection = $installer->getConnection();
       $installer->getConnection()->dropTable($tableNews);
       $table = $installer->getConnection()
        ->newTable($tableNews)
        ->addColumn('news_id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array(
            'identity'  => true,
            'nullable'  => false,
            'primary'   => true,
            ))
        ->addColumn('title', Varien_Db_Ddl_Table::TYPE_TEXT, '255', array(
            'nullable'  => false,
            ))
        ->addColumn('content', Varien_Db_Ddl_Table::TYPE_TEXT, null, array(
            'nullable'  => false,
            ))
        ->addColumn('created', Varien_Db_Ddl_Table::TYPE_DATETIME, null, array(
            'nullable'  => false,
        ));
       $installer->getConnection()->createTable($table);
       $installer->endSetup();
?>

如果我在我的数据库中理解正确,我必须得到 ds_news_entities table 。我有一个 dsnews_setup core_resource 中的行表,但我找不到我想要的表。有人能帮助我吗 ?

最佳答案

您的 config.xml 必须采用这种方式。

<?xml version="1.0"?>
<config>
    <modules>
        <[Namespace]_[Module]>
            <version>0.1.0</version>
        </[Namespace]_[Module]>
    </modules>
    <frontend>
        <routers>
            <[module]>
                <use>standard</use>
                <args>
                    <module>[Namespace]_[Module]</module>
                    <frontName>[module]</frontName>
                </args>
            </[module]>
        </routers>
        <layout>
            <updates>
                <[module]>
                    <file>[module].xml</file>
                </[module]>
            </updates>
        </layout>
    </frontend>   
    <global>
        <models>
            <[module]>
                <class>[Namespace]_[Module]_Model</class>
                <resourceModel>[module]_mysql4</resourceModel>
            </[module]>
            <[module]_mysql4>
                <class>[Namespace]_[Module]_Model_Mysql4</class>
                <entities>
                    <[module]>
                        <table>[module]</table>
                    </[module]>
                </entities>
            </[module]_mysql4>
        </models>
        <resources>
            <[module]_setup>
                <setup>
                    <module>[Namespace]_[Module]</module>
                </setup>
                <connection>
                    <use>core_setup</use>
                </connection>
            </[module]_setup>
            <[module]_write>
                <connection>
                    <use>core_write</use>
                </connection>
            </[module]_write>
            <[module]_read>
                <connection>
                    <use>core_read</use>
                </connection>
            </[module]_read>
        </resources>
        <blocks>
            <[module]>
                <class>[Namespace]_[Module]_Block</class>
            </[module]>
        </blocks>
        <helpers>
            <[module]>
                <class>[Namespace]_[Module]_Helper</class>
            </[module]>
        </helpers>
    </global>
</config>

并且有这样的 install-0.0.1.php 文件:
/** @var $installer Mage_Core_Model_Resource_Setup */
$installer = $this;

$installer->startSetup();

$table = $installer->getConnection()
    ->newTable($installer->getTable('dsnews/table_news'))
    ->addColumn(
        'news_id', Varien_Db_Ddl_Table::TYPE_INTEGER, null,
        array(
            'identity' => true,
            'unsigned' => true,
            'nullable' => false,
            'primary'  => true,
        ), 'Unique identifier'
    )
    ->addColumn(
        'title', Varien_Db_Ddl_Table::TYPE_TEXT, 100, array(), 'News title'
    )
    ->addColumn(
        'content', Varien_Db_Ddl_Table::TYPE_TEXT, null, array(), 'News content'
    )
    ->addColumn(
        'author', Varien_Db_Ddl_Table::TYPE_TEXT, 100, array(), 'News author'
    );

if (!$installer->getConnection()->isTableExists($table->getName())) {
    $installer->getConnection()->createTable($table);
}

$installer->endSetup();

我希望这会对你有所帮助。

关于mysql - 无法在 magento 模块中创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34290308/

相关文章:

mysql - 持久性与非持久性——我应该使用哪个?

MySQL |如何使用正则表达式显示列?

mysql - SQL 最长停留时间

Magento 缺货产品 SEO

JAVA - MySQL 和 ArrayList

MySQL计算两列的唯一值并为每列加入这些计数

mysql - 基于另一列对一列的约束

php - MySQL插入数据时自动更新字段

magento - Magento 2 中小部件布局更新的自定义目标

php - 订单查看页面打印 pdf 按钮 magento