Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
laravel:troubleshooting [2019/10/03 18:05] webproducer angelegt |
laravel:troubleshooting [2020/08/22 22:24] (aktuell) webproducer 419 - Page Expired |
||
---|---|---|---|
Zeile 5: | Zeile 5: | ||
---- | ---- | ||
- | **SQLSTATE 42000** | + | ==== SQLSTATE 42000 ==== |
Wenn bei Ihnen beim Ausführen von Artisan-Kommandio "migrate" der SQLSTATE 42000 auftreten sollte hilft der auf der folgenden Seite beschriebene Fix: https://laravel-news.com/laravel-5-4-key-too-long-error | Wenn bei Ihnen beim Ausführen von Artisan-Kommandio "migrate" der SQLSTATE 42000 auftreten sollte hilft der auf der folgenden Seite beschriebene Fix: https://laravel-news.com/laravel-5-4-key-too-long-error | ||
Zeile 11: | Zeile 11: | ||
---- | ---- | ||
- | **Foreign key constraint is incorrectly formed** | + | ==== Foreign key constraint is incorrectly formed ==== |
+ | |||
+ | Mögliche Ursache 1: | ||
Überprüfen Sie, ob der in der Migration definierte Fremdschlüssel (foreign) wie im folgenden Beispiel als "unsigned" angelegt wurde: | Überprüfen Sie, ob der in der Migration definierte Fremdschlüssel (foreign) wie im folgenden Beispiel als "unsigned" angelegt wurde: | ||
Zeile 19: | Zeile 21: | ||
$table->foreign( 'Ziehung_id' ) -> references( 'id' ) -> on( 'ziehungen' ) -> onDelete( 'cascade' ); | $table->foreign( 'Ziehung_id' ) -> references( 'id' ) -> on( 'ziehungen' ) -> onDelete( 'cascade' ); | ||
</code> | </code> | ||
+ | |||
+ | Mögliche Ursache 2: | ||
+ | |||
+ | Überprüfen Sie, ob die Spalte für den Fremdschlüssel vom gleichen Typ ist wie die Spalte in der Fremdtabelle: Wenn also die „id“ vom Typ „bigIncrement“ ist muss der Fremdschlüssel vom Typ „bigInteger“ sein. Ist die „id“ hingegen vom Typ „increments“ muss der Fremdschlüssel mit „integer“ angegeben werden. | ||
---- | ---- | ||
- | **ReflectionException : Class does not exist** | + | ==== ReflectionException : Class does not exist ==== |
Sollte beim ersten Versuch, einen Seed anzulegen diese Fehlermeldung auftreten kann das Kommando „composer dump-autoload“ (z. B. in PHPStorm unter „Tools“ ⇒ „Composer“ ⇒ „Dump Autoloader…“ ausführbar) abhilfe schaffen. | Sollte beim ersten Versuch, einen Seed anzulegen diese Fehlermeldung auftreten kann das Kommando „composer dump-autoload“ (z. B. in PHPStorm unter „Tools“ ⇒ „Composer“ ⇒ „Dump Autoloader…“ ausführbar) abhilfe schaffen. | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ==== Unknown Column 'updated_at'==== | ||
+ | |||
+ | Es macht längst nicht bei jeder Datenbank-Tabelle Sinn, die von Laravel angebotenen Timestamps zu setzen. Wenn in einer Migration die Timestamps 'created_at' und 'updated_at' durch die Funktion '$table->timestamps();' NICHT gesetzt wurden, muss auch das Eintragen in dem zugehörigen Model wie im folgendem Beispiel deaktivert werden: | ||
+ | |||
+ | <code php> | ||
+ | class Ziehung extends Model | ||
+ | { | ||
+ | protected $table = 'ziehungen'; | ||
+ | public $timestamps = false; | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | Wichtig hierbei ist, dass "timestamps" auch wirklich auf die Sichtbarkeit "public" gesetzt wird. Andernfalls gibt es eine entsprechende Fehlermeldung. | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ==== Datensatz wird nicht aktualisiert (es kommt aber keine Fehlermeldung) ==== | ||
+ | |||
+ | Wenn ein Datensatz nach der "save"-Funktion auf einem Model nicht aktualisiert wird und (leider) keine Fehlermeldung von Laravel ausgegeben wird kann es sein, dass der Primary-Key nicht korrekt ist. Das passiert z. B., wenn eine bereits bestehende Tabellenstruktur in Laravel übernommen wird. Eloquent erwartet als Primary-Key Standardmäßig ein kleingeschriebenes "id". Wenn die id der Tabelle jedoch groß geschrieben ist kann das Model um folgende Zeile ergänzt werden: | ||
+ | |||
+ | <code php> | ||
+ | protected $primaryKey = 'ID'; | ||
+ | </code> | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ==== 419 - Page Expired ==== | ||
+ | |||
+ | Sollte beim Aufruf einer Route der HTTP-Fehler 419 (Page Expired) zurückgegeben werden kann es an einem fehlenden CSRF-Token liegen. Zwei Lösungsvorschläge hierzu: | ||
+ | |||
+ | - Ergänzen Sie Ihr Formular um den notwendigen CSRF-Token oder | ||
+ | - Wenn die Anfrage von außen kommt und es keine Möglichkeit gibt den Token mitzuliefern (z. B. bei einem API-Aufruf) kann diese Route von der Überprüfung des Tokens ausgeschlossen werden. | ||
+ | |||
+ | Beide Lösungsmögichkeiten werden [[laravel:csrf|hier ausführlich erklärt]]. |