2014-12-07 69 views
2

我正在尝试运行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'); 
     }); 
    } 

} 
+1

那么这个错误看起来像你的迁移有问题,而不是你调用它的方式。你可以请更新与产生此错误的迁移的问题? – lukasgeiter 2014-12-07 20:43:53

+0

@lukasgeiter,谢谢你的回应。我更新了我的答案 – Kousha 2014-12-07 20:55:14

回答

3

我做了一些研究,发现this post堆栈溢出。

SQLite似乎存在NOT NULL列的问题,但没有默认值。在相同情况下,MySQL只使用空字符串(用于varchar)或“0”(用于数字)。所以它有一种默认值。

解决你的问题,你可以使列可空(仅当你希望它是可为空)或定义默认

$table->text('title')->nullable(); 

$table->text('title')->default(''); 
+0

非常感谢你! – Kousha 2014-12-07 21:07:13

+0

不客气:) – lukasgeiter 2014-12-07 21:07:41