我正在创建一个带有一些自定义数据库表的自定义模块。我需要将auto_increment值设置为5000而不是默认值1.这可以很容易地完成,但是当我尝试通过Magento安装脚本时遇到问题。我想知道为什么,以及如何解决这个问题。这里有更多细节。
当我从常规mysql客户端(如Heidi SQL或标准cli)运行以下create语句时,auto_increment值被正确设置。它被设置为5000.
CREATE TABLE mytable (
myid INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
other_column INTEGER NULL
) ENGINE=InnoDb DEFAULT CHARSET=UTF8 AUTO_INCREMENT=5000;
但是当我将完全相同的查询放入magento安装脚本时,auto_increment在运行后设置为1。需要说明的是,除了auto_increment未设置为5000这一事实外,该表是按照我的预期创建的。以下是安装脚本中的代码。
file:app / code / local / Mycompany / Mymodule / sql / mymodule_setup / mysql4-install-0.0.1.php
<?php
$installer = $this;
$installer->startSetup();
$installer->run("
CREATE TABLE {$this->getTable('mytable')} (
myid INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
other_column INTEGER NULL
) ENGINE=InnoDb DEFAULT CHARSET=UTF8 AUTO_INCREMENT=5000;
");
$installer->endSetup();
为什么会这样?有没有解决方法?
(我还要提到我已尝试使用ALTER语句设置auto_increment,我也遇到同样的问题)
答案 0 :(得分:0)
您可以将安装脚本设置为.sql文件而不是.php mysql4-install-0.0.1.sql
Checkout Mage / Core / Model / Resource / Setup.php _modifyResourceDb
try {
switch ($fileType) {
case 'sql':
$sql = file_get_contents($sqlFile);
if ($sql!='') {
$result = $this->run($sql);
} else {
$result = true;
}
break;
case 'php':
$conn = $this->_conn;
$result = include($sqlFile);
break;
default:
$result = false;
}
简短的回答:脚本明智我不认为它可能,并且使用.sql方法可能无法正常工作,因为它仍然调用run();方法
Add an auto_increment column in Magento setup script without using SQL
您还可以查看lib / Varient / Db / Adapter / Pdo / Mysql.php,以便更深入地了解后台正在进行的内容,例如multi_query
和_splitMultiQuery
此处还可以找到更多关于连接方法的内容:
ALTER TABLE in Magento setup script without using SQL
很可能你不得不超出“Magento Way”的做法并在安装模块之后制作一个自定义的安装后脚本,该脚本将在你的桌面上运行并直接调整auto_increment。 / p>
答案 1 :(得分:0)
我认为你不能以这种方式设置主键。我的所有代码都是以填充方式构建的,并且完美无缺:
<?php
$installer = $this;
$installer->startSetup();
$installer->run("
CREATE TABLE {$this->getTable('mytable')} (
myid INTEGER NOT NULL auto_increment,
other_column INTEGER NULL,
PRIMARY KEY (`myid`)
) ENGINE=InnoDb DEFAULT CHARSET=UTF8 AUTO_INCREMENT=5000;
");
$installer->endSetup();