我正在尝试按照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吗?
答案 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,'entity_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,'entity_id','eav / entity','entity_id'), 'entity_id',$ baseTableName,'entity_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)中尝试它,这将为您提供更具描述性的解释。