在我的Laravel-8应用程序中,我使用迁移创建了用户表。我想添加两个新列。我有:
class AlterTableUsers extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->string('avatar', 200)->after('password')->nullable();
$table->tinyInteger('active', 1)->after('avatar')->nullable()->default(0);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('users', function (Blueprint $table) {
$table->string('avatar', 200)->after('password')->nullable();
$table->tinyInteger('active', 1)->after('avatar')->nullable()->default(0);
});
}
当我这样做的时候:
php artisan migrate
我得到了这个错误:
SQLSTATE[42000]:语法错误或访问冲突:1067“active”的默认值无效(SQL:alter table users
add avatar
varchar(200)null after password
,add active
tinyint null default '0' auto_increment primary key after avatar
)
1 C:\xampp\htdocs\myapp\vendor\laravel\framework\src\Illuminate\Database\Connection.php:465 PDOException::(“SQLSTATE[42000]:语法错误或访问冲突:1067“active”的默认值无效“)
2 C:\xampp\htdocs\myapp\vendor\laravel\framework\src\Illuminate\Database\Connection.php:465 PDO::prepare(“alter table users
add avatar
varchar(200)null after password
,add active
tinyint null default '0' auto_increment primary key after avatar
“)
我该如何解决?
谢谢
3条答案
按热度按时间pprl5pva1#
你有两个错误。在你的down函数中,你必须删除你的列。
你的问题是这一行:
当您将
1
放入tinyInteger
字段时,您将创建一个为null的auto_increment primary key
值,并且具有默认值。这就是此处出现的错误:SQLSTATE[42000]:语法错误或访问冲突:1067“active”的默认值无效(SQL:alter table users add avatar varchar(200)null after password,add active tinyint null default '0' auto_increment primary key after avatar)
您真的需要
active
字段为auto_increment还是它只是一个tinyInteger?如果您将该行更改为:很有效。如果你这样写:
你会得到这个错误:
表定义不正确;只能有一个auto列,并且必须将其定义为键
因为
users
表已经有id
列sz81bmfz2#
如果您使用的是sqlite,它只支持每个事务修改一(1)个表,则可能会发生这种情况。
yvt65v4c3#
如果你使用nullable,那就很好地解决了默认值,而默认值不是必需的。
删除向上和向下功能中的默认值