ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php-Phalcon迁移系统中的auto_increment

2019-11-20 09:16:59  阅读:307  来源: 互联网

标签:phalcon database-migration auto-increment mysql php


由于某些原因,迁移系统在使用auto_increment主键时表现不佳.我在监督什么吗? (我正在使用Phalcon 2.0.1)

我有以下自动生成的迁移:

class LanguagesMigration_100 extends Migration
{

public function up()
{
    $this->morphTable(
        'languages',
        array(
        'columns' => array(
            new Column(
                'id',
                array(
                    'type' => Column::TYPE_INTEGER,
                    'notNull' => true,
                    'autoIncrement' => true,
                    'size' => 11,
                    'first' => true
                )
            ),
            new Column(
                'ccode',
                array(
                    'type' => Column::TYPE_VARCHAR,
                    'notNull' => true,
                    'size' => 6,
                    'after' => 'id'
                )
            ),
            new Column(
                'active',
                array(
                    'type' => Column::TYPE_INTEGER,
                    'notNull' => true,
                    'size' => 1,
                    'after' => 'ccode'
                )
            )
        ),
        'indexes' => array(
            new Index('PRIMARY', array('id')),
            new Index('UNIQ_A0D153794EE11504', array('ccode'))
        ),
        'options' => array(
            'TABLE_TYPE' => 'BASE TABLE',
            'AUTO_INCREMENT' => '9',
            'ENGINE' => 'InnoDB',
            'TABLE_COLLATION' => 'utf8_unicode_ci'
        )
    )
    );
}
}

但是,当我运行该迁移时,生成的sql会:

==> default: Phalcon DevTools (2.0.1)
==> default: 1432127144.0475
==> default: : 
==> default: SELECT IF(COUNT(*)>0, 1 , 0) FROM `INFORMATION_SCHEMA`.`TABLES` WHERE `TABLE_NAME`= 'languages' AND `TABLE_SCHEMA` = 'euromillions'
==> default:   => 
==> default: 1432127144.0619
==> default:  (
==> default: 0.014361143112183
==> default: )
==> default: 1432127144.0767
==> default: : 
==> default: DESCRIBE `euromillions`.`languages`
==> default:   => 
==> default: 1432127144.1014
==> default:  (
==> default: 0.024682998657227
==> default: )
==> default: 1432127144.1033
==> default: : 
==> default: ALTER TABLE `languages` MODIFY `id` INT(11) NOT NULL
==> default:   => 1432127144.1488 (0.045513153076172)
==> default: 1432127144.1489: ALTER TABLE `languages` ADD `active` INT(1) NOT NULL AFTER ccode
==> default:   => 1432127144.17 (0.021080017089844)
==> default: 1432127144.1701: SHOW INDEXES FROM `euromillions`.`languages`
==> default:   => 1432127144.1715 (0.001410961151123)
==> default: 1432127144.1717: ALTER TABLE `languages` ADD INDEX `UNIQ_A0D153794EE11504` (`ccode`)
==> default:   => 1432127144.181 (0.0093460083007812)
==> default: 1432127144.1811: ALTER TABLE `languages` DROP INDEX `ccode`
==> default:   => 1432127144.185 (0.0038588047027588)
==> default: 1432127144.185: ALTER TABLE `languages` DROP INDEX `ccode_2`
==> default:   => 1432127144.1883 (0.0032830238342285)
==> default:                                                     
==> default:   Success: Version 1.0.0 was successfully migrated  

如您所见,修改了id字段,其中不包含auto_increment.

解决方法:

我正在回答自己的问题,因为这似乎是Phalcon迁移系统中的错误.

正如@axalix指出的那样,迁移是在以前存在的表上完成的. (我支持您的回答,因为它帮助我找到了解决方案).

这是原始表:

CREATE TABLE `languages` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `ccode` varchar(6) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `ccode` (`ccode`),
  KEY `ccode_2` (`ccode`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

这是修改后的表(由主义orm:schema-tool修改)

CREATE TABLE `languages` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `ccode` varchar(6) COLLATE utf8_unicode_ci NOT NULL,
  `active` tinyint(1) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `UNIQ_A0D153794EE11504` (`ccode`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

原来,我忘记了Doctrine实体中的“ unsigned”选项,因此,在更改表时,该表看起来像

CREATE TABLE `languages` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ccode` varchar(6) COLLATE utf8_unicode_ci NOT NULL,
  `active` tinyint(1) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `UNIQ_A0D153794EE11504` (`ccode`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

出于某种原因,在不使用unsigned选项的情况下运行phalcon迁移会使其忘记auto_increment.

我将尝试单独复制它,以将错误报告给Phalcon家伙.

标签:phalcon,database-migration,auto-increment,mysql,php
来源: https://codeday.me/bug/20191120/2042851.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有