Неуспешна настройка на Magento eav обект - Не може да се създаде таблица

Опитвам се да настроя персонализиран обект в Magento 1.7.0.0, следвайки алън щурмува статия за това, но с този прост инсталационен скрипт ми казва, че „Не може да се създаде таблица: 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);

Вместо това бих препоръчал да следвате съветите в публикацията на Zachary Schuessler и или

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