在laravel项目中执行php artisan migrate时出现如下错误:
Exception trace:
1 Doctrine\DBAL\Driver\PDOException::("SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '' for key 'users_api_token_unique'")
E:\www\lara0096a\vendor\doctrine\dbal\lib\Doctrine\DBAL\Driver\PDOStatement.php:119
2 PDOException::("SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '' for key 'users_api_token_unique'")
E:\www\vendor\doctrine\dbal\lib\Doctrine\DBAL\Driver\PDOStatement.php:117
在网上搜索了一番,有说driver,有说改什么191错误,其实根本原因不在那儿。
以下是执行的脚本:
Schema::table('users', function ($table) {
if (!Schema::hasColumn('users', 'api_token')) {
$table->string('api_token',64)->unique()->after('name')->comment('APIToken');
}
});
执行php artisan migrate后,提示文初所粘出的错误,经过仔细排查,发现是unique()这儿出错了,因为数据库里原来有数据,因为新增加的字段为空,所以导致Duplicate entry ” for key ‘users_api_token_unique'”)错误。
当我把该数据表的数据清空时,再次执行php artisan migrate便成功了。
因为,更新表字段时要注意带有unique()字段更新,会因为原表有数据而失败。