Laravel单元测试迁移失败
我正在尝试运行PHPUnit测试。对于测试环境,我已在:memory
中设置SQLite
。在我的设置,我叫Artisan::call('migrate')
但后来我得到以下错误:Laravel单元测试迁移失败
General error: 1 Cannot add a NOT NULL column with default value NULL (SQL: alter table "admins" add column "title" text not 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');
});
}
}
我做了一些研究,发现this post堆栈溢出。
SQLite似乎存在NOT NULL
列的问题,但没有默认值。在相同情况下,MySQL只使用空字符串(用于varchar)或“0”(用于数字)。所以它有一种默认值。
解决你的问题,你可以使列可空(仅当你希望它是可为空)或定义默认。
$table->text('title')->nullable();
$table->text('title')->default('');
非常感谢你! – Kousha 2014-12-07 21:07:13
不客气:) – lukasgeiter 2014-12-07 21:07:41
那么这个错误看起来像你的迁移有问题,而不是你调用它的方式。你可以请更新与产生此错误的迁移的问题? – lukasgeiter 2014-12-07 20:43:53
@lukasgeiter,谢谢你的回应。我更新了我的答案 – Kousha 2014-12-07 20:55:14