Magento eav实体设置失败 - 创建了一半表,其他表没有创建

时间:2012-02-15 13:52:51

标签: magento entity-attribute-value

我正在尝试按照alan storms article about it设置自定义实体,但是使用这个简单的安装脚本,它会告诉我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 bug吗?

3 个答案:

答案 0 :(得分:1)

在我之前的帖子之后,我在同一个教程中走得更远,但我仍然遇到了问题。最后,我引导了这两个帖子,让我完成了教程:

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行:

- &gt; addForeignKey($ this-&gt; getFkName($ eavTableName,'e​​ntity_id','eav / entity','entity_id'), 'entity_id',$ this-&gt; getTable('eav / entity'),'entity_id', Varien_Db_Ddl_Table :: ACTION_CASCADE,Varien_Db_Ddl_Table :: ACTION_CASCADE)

应该是:

- &gt; addForeignKey($ this-&gt; getFkName($ eavTableName,'e​​ntity_id','eav / entity','entity_id'), 'entity_id',$ baseTableName,'e​​ntity_id', Varien_Db_Ddl_Table :: ACTION_CASCADE,Varien_Db_Ddl_Table :: ACTION_CASCADE)

答案 1 :(得分:1)

我在1.7.0.0中遇到了同样的问题。 我发现问题出现在createEntityTables()方法的事务(第1359行)中,但我不知道为什么......

所以我只是将整个createEntityTables()方法复制到我的安装脚本中(我不想弄乱核心!),将foreach循环(第1361行)移出事务,一切正常!

至于为什么beginTransaction()可能会抛出异常,我不知道!

答案 2 :(得分:0)

我遇到了同样的问题。在我的情况下,我意识到尝试创建数据库表时发生的错误是:BLOB/TEXT column 'value' used in key specification without a key length

要强制Magento呈现我的数据库可以接受的SQL语句,我必须在大约1337行(app/code/core/Mage/Eav/Model/Entity/Setup.php方法内)修改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 column 'value' used in key specification without a key length

如果这不能解决您的问题,我建议您进入lib/Varien/Db/Adapter/Pdo/Mysql.php方法内的createTable文件,并在return语句之前添加以下代码:

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

通过这种方式,您可以看到您的数据库存在哪些SQL问题,因此您可以在SQL客户端(即phpMyAdmin)中尝试它,这将为您提供更具描述性的解释。