从 magento 模块创建一个新表
我正在尝试使用一个管理模块在数据库中创建一个新表.我的设置
I am trying to have an admin module I am working on create a new table in the database. What I have setup in
app/code/local/Foo/BAR/sql/mysql4-install-0.1.0.php
app/code/local/Foo/BAR/sql/mysql4-install-0.1.0.php
<?php
$installer = $this;
$installer->startSetup();
$installer->run("
DROP TABLE IF EXISTS {$this->getTable('notes')};
CREATE TABLE {$this->getTable('notes')} (
`ppr_id` int(11) NOT NULL AUTO_INCREMENT,
`notesku` bigint(20) NOT NULL,
`notestatus` smallint(16),
PRIMARY KEY (`notes`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
");
$installer->endSetup();
这个在 app/code/local/Foo/BAR/etc/config.xml
and this in app/code/local/Foo/BAR/etc/config.xml
<?xml version="1.0"?>
<config>
<modules>
<Foo_BAR>
<version>0.1.0</version>
</Foo_BAR>
</modules>
<global>
<models>
<BAR>
<class>Foo_BAR_Model</class>
<resourceModel>BAR_mysql4</resourceModel>
</BAR>
<BAR_myslq4>
<class>Foo_BAR_Model_Mysql4</class>
<entities>
<BAR>
<table>notes</table>
</BAR>
</entities>
</BAR_myslq4>
</models>
<resources>
<BAR_setup>
<setup>
<module>Foo_BAR</module>
</setup>
<connection>
<use>core_setup</use>
</connection>
</BAR_setup>
<BAR_write>
<connection>
<use>core_write</use>
</connection>
</BAR_write>
<BAR_read>
<connection>
<use>core_read</use>
</connection>
</BAR_read>
</resources>
</global>
<admin>
<routers>
<BAR>
<use>admin</use>
<args>
<module>Foo_BAR</module>
<frontName>bar</frontName>
</args>
</BAR>
</routers>
</admin>
<adminhtml>
<menu>
<catalog>
<children>
<BAR_menu translate="title" module="BAR">
<title>BAR</title>
<children>
<list translate="title" module="BAR">
<title>Bar</title>
<action>bar/index/index</action>
</list>
</children>
</BAR_menu>
</children>
</catalog>
</menu>
</adminhtml>
</config>
我使用的案例与我的公司大写且模块名称全部大写的示例相匹配.我在想也许这让我绊倒了?我的理解是,一旦我运行点击该模块的页面,它将触发该 mysql 以创建表.那是对的吗?还有什么我应该做的吗?
The case I am using matches this example where my company is capitalized and the module name is all uppercase. I am thinking maybe that is tripping me up? My understanding is that once I run the page that hits that module it will trigger that mysql to create the table. Is that correct? Is there something else I should be doing?
我非常感谢您对此的任何帮助.
I greatly appreciate any help with this.
推荐答案
如果安装/升级脚本未运行,请检查以下事项:
If a setup/upgrade script isn't running, here are some things to check:
Magento 是否正在加载您的模块?转到系统 > 配置 > 高级 > 高级,然后查看您的模块是否出现在禁用模块输出"列表中.如果没有,则 Magento 根本不会加载您的模块,因此不会运行任何安装脚本.正如 Cags 在他的评论中指出的那样,如果您尚未创建模块,您将需要
app/etc/modules
中的一个 xml 文件来告诉 Magento 加载您的模块.
Is Magento loading your module? Go to System > Configuration > Advanced > Advanced and see if your module appears in the "Disable Module Output" list. If it doesn't, Magento isn't loading your module at all, and therefore won't run any setup scripts. As Cags noted in his comment, you'll need an xml file in
app/etc/modules
to tell Magento to load your module if you haven't already created one.
确保您的资源在 config.xml 文件中的正确位置声明.它们应该在 <global>
标签内(这在您的情况下似乎是正确的).
Make sure your resources are declared in the correct place in the config.xml file. They should be inside the <global>
tag (this appears to be correct in your case).
确保您的安装文件位于正确的位置.它们应该位于模块内的 sql/文件夹中.我认为这是你的问题,这个例子中的安装文件应该是 app/code/local/Foo/BAR/sql/BAR_setup/mysql4-install-0.1.0.php
Make sure your setup files are in the correct location. They should be in a sql/ folder inside your module. I think this is your problem, the setup file in this example should be app/code/local/Foo/BAR/sql/BAR_setup/mysql4-install-0.1.0.php
检查完以上所有内容后,如果您有一个用于调试的 IDE(并且如果您正在做任何严肃的 Magento 工作,请帮自己一个忙并获得一个),在设置中设置一个断点文件并确保它被命中.
Having checked all of the above, if you have an IDE set up for debugging (and if you're doing any serious Magento work, do yourself a favor and get one up), set a breakpoint in the setup file and make sure it's being hit.
检查数据库中的 core_resource
表中的 BAR_setup
条目.如果它在那里,Magento 已经运行了一次安装脚本并且不会再次运行它.如果您需要再次运行安装脚本,请删除此记录.同样,如果您需要重新运行升级脚本,您可以更改版本号(但请确保您了解第二次运行安装/升级脚本的后果).
Check the core_resource
table in the database for a BAR_setup
entry. If it's there, Magento has run the setup script once and won't run it again. If you need to run your setup script again, delete this record. Likewise you can change the version numbers if you ever need to re-run upgrade scripts (but make sure you understand the consequences of running setup/upgrade scripts a second time if you do).
如果所有其他方法都失败,请查看 Alan Storm 的 Magento 安装脚本调试指南.
If all else fails check out Alan Storm's guide to debugging Magento setup scripts.
相关文章