我正在尝试运行PHPUnit测试。我在SQLite
中为测试环境设置了:memory
。在我的设置中,我调用Artisan::call('migrate')
,但后来我收到以下错误:
常规错误:1无法添加默认值为NULL的NOT NULL列 (SQL:alter table“admins”添加列“title”文本不为null)
基本上,修改现有表的任何迁移文件都会返回错误。为什么呢?
以下是文件迁移抱怨:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
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');
});
}
}
答案 0 :(得分:4)
我做了一些研究,发现了Stack Overflow上的this post。
SQLite似乎有NOT NULL
但没有默认值的列存在问题。在相同的情况下,MySQL只使用空字符串(对于varchar)或&#34; 0&#34; (对于数字)。所以它有一些内置的默认值。
要解决您的问题,您可以将列可以为空(仅当您希望它可以为空)或定义默认。
$table->text('title')->nullable();
$table->text('title')->default('');