Почему я не могу установить значение auto_increment в своем скрипте установки magento? - PullRequest
2 голосов
/ 11 июля 2011

Я создаю пользовательский модуль с несколькими пользовательскими таблицами базы данных.Мне нужно установить значение auto_increment равным 5000 вместо значения по умолчанию, равного 1. Это можно сделать довольно легко, но у меня возникают проблемы при попытке сделать это с помощью сценария установки Magento.Я хочу знать, почему и как обойти эту проблему.Вот более подробная информация.

Когда я запускаю следующую инструкцию create из обычного клиента mysql (например, Heidi SQL или стандартного cli), значение 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. Вот код в сценарии установки.

файл: 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();

Почему это происходит?Есть ли обходные пути?

(я также упомяну, что я попытался установить auto_increment с помощью инструкции ALTER, и у меня возникла та же проблема)

Ответы [ 2 ]

0 голосов
/ 01 апреля 2012

Не думаю, что вы можете установить первичный ключ таким образом. Весь мой код построен следующим образом и прекрасно работает:

    <?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();
0 голосов
/ 11 июля 2011

Вы можете настроить скрипт установки в виде файла .sql вместо .php mysql4-install-0.0.1.sql

Оформить заказ Маг / Ядро / Модель / Ресурс / 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 (); способ.

Добавление столбца auto_increment в сценарии установки Magento без использования SQL

Вы также можете взглянуть на lib / Varient / Db / Adapter / Pdo / Mysql.php для более глубокой ссылки на то, что происходит в фоновом режиме, например multi_query и _splitMultiQuery

Более подробное описание методов подключения можно найти здесь:

ALTER TABLE в скрипте установки Magento без использования SQL

Скорее всего, вам придется выходить за рамки «пути Magento», и после установки модуля создайте собственный скрипт после установки, который будет запускаться на вашем столе, и напрямую настраивайте auto_increment.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...