Ошибка установки сущности в Magento eav - половина таблиц создана, остальные нет - PullRequest
2 голосов
/ 15 февраля 2012

Я пытаюсь настроить пользовательский объект, следуя статье alan storms об этом , но с помощью этого простого сценария установки он сообщает мне, что Can't create table: extended_categories_text. Когда я смотрю в базу данных, я могу видеть следующие таблицы:

extended_categories
extended_categories_datetime
extended_categories_decimal
extended_categories_int

Мой скрипт установки прост и выглядит следующим образом:

<?php
$installer = $this;

$installer->addEntityType('csvengine_extendedcategories',Array(
    'entity_model'          =>'csvengine/extendedcategories',
    'attribute_model'       =>'',
    'table'                 =>'csvengine/extendedcategories',
    'increment_model'       =>'eav/entity_increment_numeric',
    'increment_per_store'   =>'0'
));

$installer->createEntityTables(
    $this->getTable('csvengine/extendedcategories')
);

Как мне заставить работать мой скрипт установки? Это известная ошибка в magento?

Ответы [ 3 ]

1 голос
/ 09 марта 2012

После моего предыдущего поста я немного углубился в то же руководство, но все еще сталкивался с проблемами.Наконец, меня привели к этим двум постам, которые позволили мне завершить урок:

http://www.magentocommerce.com/bug-tracking/issue/?issue=12336
http://www.magentocommerce.com/bug-tracking/issue/?issue=12126

Последний указывает на ошибку в версии MagentoЯ использовал.

Mage_Eav_Model_Entity_Setup, строка 1341:

-> addForeignKey ($ this-> getFkName ($ eavTableName, 'entity_id', 'eav / entity', 'entity_id'), 'entity_id ', $ this-> getTable (' eav / entity '),' entity_id ', Varien_Db_Ddl_Table :: ACTION_CASCADE, Varien_Db_Ddl_Table :: ACTION_CASCADE)

Должно быть:

-> addForeignKey (this-> getFkName ($ eavTableName, 'entity_id', 'eav / entity', 'entity_id'), 'entity_id', $ baseTableName, 'entity_id', Varien_Db_Ddl_Table :: ACTION_CASCADE, Varien_Db_Ddl_Table :: ACTION_CADE)

1 голос
/ 16 мая 2012

У меня была такая же проблема с 1.7.0.0. Я обнаружил, что проблема была в транзакции (строка 1359) метода createEntityTables (), но я не знаю, почему ...

Итак, я просто скопировал весь метод createEntityTables () в мой скрипт установки (я не хочу связываться с ядром!), Переместил цикл foreach (строка 1361) из транзакции, и все заработало нормально!

Относительно того, почему beginTransaction() может вызывать исключение, я понятия не имею!

0 голосов
/ 28 февраля 2012

Я столкнулся с той же проблемой.В моей ситуации я понял, что при попытке создать таблицу базы данных произошла ошибка: BLOB/TEXT column 'value' used in key specification without a key length

Чтобы заставить Magento отображать операторы SQL, которые может принять моя база данных, мне пришлось изменить файл app/code/core/Mage/Eav/Model/Entity/Setup.php впримерно строка 1337 (внутри метода createEntityTables).Заменив следующие строки:

        ->addIndex($this->getIdxName($eavTableName, array('attribute_id', 'value')),
            array('attribute_id', 'value'))
        ->addIndex($this->getIdxName($eavTableName, array('entity_type_id', 'value')),
            array('entity_type_id', 'value'))

этим:

        ->addIndex($this->getIdxName($eavTableName, array('attribute_id', 'value')),
            array('attribute_id', $type == 'text' ? array('name' => 'value', 'size' => 255) : 'value'))
        ->addIndex($this->getIdxName($eavTableName, array('entity_type_id', 'value')),
            array('entity_type_id', $type == 'text' ? array('name' => 'value', 'size' => 255) : 'value'))

Я использовал этот тикет для решения вышеуказанной проблемы: столбец BLOB / TEXT 'значение', используемый в спецификации ключабез длины ключа

Если это не решит вашу проблему, я бы предложил зайти в файл lib/Varien/Db/Adapter/Pdo/Mysql.php внутри метода createTable и добавить следующий код непосредственно перед оператором return:

<code>    echo "<pre>SQL:\n$sql\n\n
";

Таким образом, вы можете увидеть, с каким SQL у вашей базы данных возникают проблемы, и вы можете попробовать его в клиенте SQL (например, phpMyAdmin), который даст вам более информативныйобъяснение того, что происходит не так.

...