2014-12-07 99 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