Magento eav实体设置失败-无法创建表

r1zhe5dt  于 2022-11-12  发布在  其他
关注(0)|答案(2)|浏览(141)

我尝试在Magento www.example.com中设置一个自定义实体1.7.0.0,遵循alan storms article about it,但使用这个简单的安装脚本时,它告诉我“无法创建表: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错误?

7jmck4yq

7jmck4yq1#

在我的例子中,这个问题是由于Magento 1.7/1.12中createEntityTables()方法的一个bug引起的
their answer to this bug report中,Magento团队建议注解掉lib/Varien/Db/Adapter/Pdo/Mysql.php中的第417行:

$this->_checkDdlTransaction($sql);

相反,我建议您遵循the advice in Zachary Schuessler's post,并且
1)将createEntityTables()方法复制到您自己的文件(Your/Module/Model/Resource/Setup.php)中,并注解掉事务方法...

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(...
mqkwyuun

mqkwyuun2#

首先,这句台词是错误的:

'increment_model'=>'',eav/entity_increment_numeric

它必须在引号内。
失败的是,有一些错误的安装程序功能的最新版本。
使用phpMyAdmin或类似的方法进入数据库,查看是否有表已经存在。如果存在,则删除它们。同时删除core_resource中的模块记录。
再试一次。
然后这里有一个步骤,我不记得我的头(有用的,我知道,但我会尽量记住它今晚和编辑)。
创建表后,如果查看类型表(int、text char等)的外键分配,您会注意到entity_id字段查看的是eav_entity.entity_id。这需要更改为eavblogpost_entity表。
您可能还会注意到,当所有外键引用都是INT(10)时,eavblogpost_entity.entity_id字段是INT(11)。请手动将eavblogpost_entity.entity_id字段更改为INT(10)。
解决所有这些问题的唯一方法是用一个可以工作的函数覆盖createEntityTables()函数,或者手动创建所有表。
在你做这些事情的时候,我相信你会偶然发现你必须做的一步,我已经忘记了。对不起!

相关问题