我正在尝试运行 PHPUnit 测试。我已经为测试环境设置了SQLite
:memory
。在我的设置中,我调用Artisan::call('migrate')
但随后出现以下错误:
常规错误:1 无法添加默认值为 NULL 的 NOT NULL 列 (SQL:更改表"管理员"添加列"标题"文本不为空)
基本上,任何修改现有表的迁移文件都会返回错误。为什么?
以下是文件迁移正在抱怨的问题:
<?php
use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
class AddTitleToAdminsTable extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('admins', function(Blueprint $table)
{
$table->text('title');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('admins', function(Blueprint $table)
{
$table->dropColumn('title');
});
}
}
我做了一些研究,并在Stack Overflow上找到了这篇文章。
SQLite 似乎对NOT NULL
但没有默认值的列有问题。在相同的情况下,MySQL只使用空字符串(用于varchar)或"0"(用于数字)。所以它内置了默认值。
要解决您的问题,您可以使列可为空(仅当您希望它可为空时)或定义默认值。
$table->text('title')->nullable();
$table->text('title')->default('');