Не удалось настроить сущность Magento eav - невозможно создать таблицу

Я пытаюсь настроить пользовательский объект в Magento 1.7.0.0, следуя alan storms статья об этом, но с этим простым скриптом установки он говорит мне, что "Невозможно создать таблицу: eavblog_posts".

Мой сценарий установки предельно прост и выглядит так:

<?php
$installer = $this;
$installer->addEntityType('complexworld_eavblogpost',
Array(
'entity_model'=>'complexworld/eavblogpost',
'attribute_model'=>'',
'table'=>'complexworld/eavblogpost',
'increment_model'=>'',eav/entity_increment_numeric
'increment_per_store'=>'0'
));
$installer->createEntityTables(
$this->getTable('complexworld/eavblogpost')
);

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


person Maro Huang    schedule 08.05.2012    source источник


Ответы (2)


Во-первых, эта строка неверна:

'increment_model'=>'',eav/entity_increment_numeric

Он должен быть внутри кавычек.

За исключением того, что в функциях установщика последней версии есть некоторые ошибки.

Войдите в свою базу данных с помощью phpMyAdmin или аналогичного и проверьте, существуют ли уже какие-либо таблицы. Если они есть, удалите их. Также удалите запись модуля в core_resource.

Попробуй снова.

Затем здесь есть шаг, который я не могу вспомнить навскидку (полезный, я знаю, но я постараюсь запомнить его сегодня вечером и отредактировать это).

После создания таблиц, если вы посмотрите на назначения внешнего ключа для таблиц типов (int, text char и т. д.), вы заметите, что поле entity_id смотрит на eav_entity.entity_id. Это нужно изменить на вашу таблицу eavblogpost_entity.

Вы также можете заметить, что поле eavblogpost_entity.entity_id имеет значение INT(11), тогда как все ссылки на внешний ключ имеют значение INT(10). Вручную измените поле eavblogpost_entity.entity_id на INT(10).

Единственный способ обойти все это — переопределить функцию createEntityTables() на ту, которая работает, или создать все таблицы вручную. Вот хороший ресурс, который поможет вам в этой частиhttp://inchoo.net/ecommerce/magento/creating-an-eav-based-models-in-magento/

Возитесь со всем этим, и я уверен, что вы наткнетесь на шаг, который вы должны сделать, который я забыл. Прости!

person Magento Guy    schedule 09.05.2012
comment
Извините, я думаю, что комментарии программы не ясны. Код выглядит следующим образом: 'increment_model' =›'','increment_per_store' =›'0', я постараюсь дать вам ответы, большое спасибо - person Maro Huang; 10.05.2012

В моем случае проблема возникла из-за ошибки с методом createEntityTables() в Magento 1.7/1.12.

В ответе на этот отчет об ошибке команда Magento рекомендует закомментировать строку 417 из lib/Varien/Db/Adapter/Pdo/Mysql.php:

$this->_checkDdlTransaction($sql);

Вместо этого я бы рекомендовал следовать совету Закари Шусслера и либо

1) скопировать метод createEntityTables() в свой файл (Your/Module/Model/Resource/Setup.php) и закомментировать методы транзакции...

or

2) написание абстрактного запроса для сохранения транзакций:

// Example of MySQL API
/**
 * Create table array('catalog/product', 'decimal')
 */
$table = $installer->getConnection()
    ->newTable($installer->getTable(array('catalog/product', 'decimal')))
    ->addColumn('value_id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array(
        'identity'  => true,
        'nullable'  => false,
        'primary'   => true,
        ), 'Value ID')
    ->addColumn(...
person jmlnik    schedule 29.03.2013
comment
Afaics, нет абсолютно никакой причины выбирать № 2. # 1 в порядке, учитывая, что # 2 тоже не дает вам транзакций... :( - person jmlnik; 29.03.2013
comment
В 1.9 код другой, пришлось удалить FK в eav_entity_type - person Leo Fisher; 16.01.2017