我正在尝试使用Magento的 *varien_db_ddl_table *在Magento数据库中创建一个新表。使用Fresh Magento 1.7.0.2 CE安装。

我不喜欢语法。我正在尝试创建一个 布尔 田野,但我也会满足 微小 如果需要。我的 可创造 看起来这样:

$table_one = $installer->getConnection()
->newTable($installer->getTable('my_module/table'))
->addColumn('id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array(
    'unsigned' => true,
    'identity' => true,
    'nullable' => false,
    'primary' => true,
), 'Entity id')
->addColumn('store_id', Varien_Db_Ddl_Table::TYPE_TEXT, 63, array(
    'nullable' => true,
    'default' => null,
), 'Store view id')
->addColumn('is_active', Varien_Db_Ddl_Table::TYPE_TINYINT, 1, array(
    'nullable' => false,
    'default' => 1,
), 'Status')
->addColumn('created_at', Varien_Db_Ddl_Table::TYPE_TIMESTAMP, null, array(
    'nullable' => true,
    'default' => null, 
), 'Creation time')
->addIndex($installer->getIdxName(
    $installer->getTable('my_module/table'),
    array('store_id'),
    Varien_Db_Adapter_Interface::INDEX_TYPE_INDEX
), 
array('store_id'), 
array('type' => Varien_Db_Adapter_Interface::INDEX_TYPE_INDEX)
)
->setComment('My Module Table');
$installer->getConnection()->createTable($table_one);

我正在挣扎的领域是 is_active. 。 MySQL试图设置为自动收入和null?!?

谁能让我直截了当,还是将我指向一些有用的文档?我发现 这些, ,但实际上没有语法准则:(

谢谢你。

有帮助吗?

解决方案

在大多数情况下,Magento Internals在设置上使用RAW SQL处理初始表创建:

app/code/core/enterprise/cms/sql/enterprise_cms_setup/mysql4-install-1.6.0.0.0.0.php

$installer->run("CREATE TABLE IF NOT EXISTS `{$installer->getTable('enterprise_cms/hierarchy_metadata')}` (
  `node_id` INT(10) UNSIGNED NOT NULL,
  `meta_first_last` TINYINT(1) NOT NULL DEFAULT '0',
  `meta_next_previous` TINYINT(1) NOT NULL DEFAULT '0',
  `meta_chapter` TINYINT(1) NOT NULL DEFAULT '0',
  `meta_section` TINYINT(1) NOT NULL DEFAULT '0',
  `pager_visibility` TINYINT(4) UNSIGNED NOT NULL,
  `pager_frame` SMALLINT(6) UNSIGNED NOT NULL,
  `pager_jump` SMALLINT(6) UNSIGNED NOT NULL,
  `menu_visibility` TINYINT(4) UNSIGNED NOT NULL,
  `menu_levels_up` TINYINT(4) UNSIGNED NOT NULL,
  `menu_levels_down` TINYINT(4) UNSIGNED NOT NULL,
  `menu_ordered` TINYINT(4) UNSIGNED NOT NULL,
  `menu_list_type` VARCHAR(50) NOT NULL DEFAULT '',
  PRIMARY KEY (`node_id`),
  CONSTRAINT `FK_ENTERPRISE_CMS_HIERARCHY_METADATA_NODE` FOREIGN KEY (`node_id`) REFERENCES `{$installer->getTable('enterprise_cms/hierarchy_node')}` (`node_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
");

您会看到小巧的类型经常通过 addColumn 可以通过 getConnection()$installer:

法师/核心/目录/sql/catalog_setup/mysql4-upgrade-0.7.72-0.7.73.php

$installer->getConnection()->addColumn($installer->getTable('catalog/product_super_attribute_label'),
    'use_default', 'tinyint(1) UNSIGNED DEFAULT 0 AFTER store_id');

通常在现有表上调用。

将Tinyint(1)用作布尔人没有错. 。如果您已经对节目的设置已固定,则可以使用Copy-pasta方法的popuplating表格架构 $installer->run, 避免您所遇到的设置困境 并在以后运行AddColumn 作为模块中的更新:

mySQL4-upgrade-0.1.0-0.1.1:

$installer->getConnection()->addColumn($installer->getTable('yourresource/model'),
    'is_active', 'TINYINT(1) UNSIGNED DEFAULT 0 AFTER store_id');

其他提示

供将来参考,以下语法将添加 tinyint(1) 字段 - 为此 布尔 是mysql的别名:

->addColumn('is_active', Varien_Db_Ddl_Table::TYPE_BOOLEAN, 1, array(
    'nullable' => false,
    'default' => 1,
), 'Status')

以及MySQL中的最终字段:

Name, Type, Null, Default
is_active, tinyint(1), No, 1

希望对未来的访客有帮助。

许可以下: CC-BY-SA归因
scroll top