2017-02-10 5 views
2

私のユニットテストは最近失敗し始めました。私はこのエラーを取得しています:私はその後、「start_month」行をコメントアウトした場合Laravelテーブル*に名前の列がありません。*

$loan = LoanDetails::create(['loan_percentage' => .8, 
     'loan_product_id' => 1, 
     'interest_rate' => .5, 
     'start_month' => 0, 
     'term' => 120, 
     'fixed_finance_fee' => 0, 
     'variable_finance_Fee' => 0, 
     'valid_from' => '2015-01-01' 
    ]); 

が、それは論理的に動作します:

PDOException: SQLSTATE[HY000]: 
General error: 1 table loan_details has no column named start_month 

それが起こっているライン、私はこのコードを持っています。

ユニットテストの設定では、すべての移行(約80回)を実行します。これは、のすべてを一覧表示

$rows = DB::table('migrations')->get(); 
print_r($rows); 

私はこのようになり、移行があります。すべての移行は、私はこのコードを実行したので、実行していなかったのであれば

Schema::table('loan_details', function(Blueprint $table){ 
    $table->integer('start_month')->unsigned()->after('interest_only')->default(0); 
    $table->decimal('balloon_percent',4,3)->after('term')->nullable(); 
    $table->integer('balloon_month')->after('balloon_percent')->nullable(); 
    $table->dropColumn('ordinal_rank'); 
}); 

を、私は疑問に思いました移行が完了したことを示します。私はテストのためのメモリsqliteのDBを使用しています。

マイグレーションが非同期で実行され、コードが実行されるまでにすべてが完了していないのではないかと思いますか?または、移行がどこかで黙って失敗している場合ですか?

私は何時間もこのことをしており、何が起こっているのか分かりません。

*更新私は上記の移行の後に実行される移行を行っており、その後の移行が成功したことを確認しました。したがって、何らかの方法で黙って失敗しているのは、この1回の移行だけです。

+0

マイグレーションの一覧に列が追加されているのが見えますか? –

+0

はい、私は期待しているものを含め、それらのすべてをリストアップしています。 – ajon

+0

そしてその列はデータベースに表示されますか?移行の実行中にエラーが発生した場合、移行が完了していない場合でも移行テーブルに保存される可能性があります。 –

答えて

4

問題が見つかりました。これは、sqliteがhereと表示されているように、1つのテーブル呼び出しで複数のaddカラム文を持たないというばかげた制限のためです。それが動作する以下のように私は、移行を分離

Schema::table('loan_details', function(Blueprint $table){ 
    $table->integer('start_month')->unsigned()->after('interest_only')->default(0); 
}); 
Schema::table('loan_details', function(Blueprint $table){ 
    $table->decimal('balloon_percent',4,3)->after('term')->nullable(); 
}); 
Schema::table('loan_details', function(Blueprint $table){ 
    $table->integer('balloon_month')->after('balloon_percent')->nullable(); 
}); 
Schema::table('loan_details', function(Blueprint $table){ 
    $table->dropColumn('ordinal_rank'); 
}); 
+1

答えをありがとう。これは大きな助けになりました。 $ table-> morphs( 'taggable')を使用できないことは非常に残念です。これはカラムとインデックスを生成するので、sqliteを使った単体テストでは問題になります。 – Hendrik

0

は、SQLiteのDBレコードを確認するにはhereあり

他の多くの便利なビルトインドットコマンド - http://www.sqlite.org/sqlite.htmlでドキュメントを参照してください。 、section sqlite3への特別なコマンド。

また、DBスキーマを確認

関連する問題