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]]. | ||