2017-02-10 3 views
2

Meine Komponententests begannen vor kurzem zu scheitern. Ich erhalte diese Fehlermeldung:Laravel-Tabelle * hat keine Spalte mit dem Namen *

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

Die Linie, wo es passiert ist, habe ich diesen Code haben:

$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' 
    ]); 

Wenn ich die „start_month“ Zeile aus kommentieren es dann logisch funktioniert.

Im Setup meiner Unit Tests laufe ich alle Migrationen (ca. 80).

Ich habe eine Migration, die wie folgt aussieht:

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'); 
}); 

Also, ich fragte mich, ob alle Migrationen nicht ausgeführt wurden, so lief ich diesen Code:

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

Diese alle Listen Migrationen als abgeschlossen. Ich benutze eine im Speicher SQLite db für die Tests.

Ich frage mich, ob die Migrationen asynchron ausgeführt werden und sie nicht alle zu der Zeit fertig sind, die mein Code ausgeführt wird? Oder wenn die Migrationen irgendwo scheitern?

Ich bin seit Stunden hier und weiß nicht, was passiert.

* UPDATE Ich habe eine Migration, die NACH der obigen Migration ausgeführt wird, und ich bestätigte, dass die nachfolgende Migration erfolgreich war. Es ist also nur diese eine Migration, die auf irgendeine Art stillschweigend versagt.

+0

Sehen Sie die Migration, die die Spalte in der Liste der Migrationen hinzugefügt wird? –

+0

Ja, ich listet alle auf, einschließlich der, die ich erwarte. – ajon

+0

Und sehen Sie diese Spalte in der Datenbank? Wenn bei der Migration ein Fehler aufgetreten ist, wird dieser möglicherweise in der Migrationstabelle gespeichert, obwohl er nicht abgeschlossen wurde. –

Antwort

4

Ich habe das Problem gefunden. Es ist wegen der lächerlichen Einschränkung, die SQLite hat nicht mehrere add Spalte Anweisungen in einem Tabellenaufruf wie here gesehen.

Wenn ich die Migration trennen, wie unten funktioniert es:

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

Danke für die Antwort. Das hat sehr geholfen. Es ist sehr enttäuschend, dass Sie $ table-> morphs ('taggable') nicht verwenden können; da dies zu Spalten und einem Index führt, was beim Komponententest mit sqlite problematisch sein wird. – Hendrik

0

SQLite DB Datensätze Um zu überprüfen, here

Es gibt viele andere nützliche integrierte in Punktbefehle - finden Sie in der Dokumentation zu http://www.sqlite.org/sqlite.html , Abschnitt Spezielle Befehle zu sqlite3.

Überprüfen Sie auch DB-Schema

Verwandte Themen