Wenn CakePHP einen Eintrag nicht speichern will (oder auch: Hilfe, patchEntity funktioniert nicht) | 17.07.2018
(Copyright des Bildes siehe Credits)
Gestern Abend habe ich etwas an einem Code herumgespielt. Ich habe ein neues Model erstellt - natürlich mit Table und Entity Datei. Als ich dann aber Daten in der Datenbank verändern bzw. updaten wollte, funktionierte es nicht. Die Suche hat mich verrückt werden lassen.
Das Problem war, dass patchEntity
keine Veränderung herbeiführte:
<?php
var_dump($data);
$DataTable->patchEntity($data, ['active' => 2]);
var_dump($data);
erzeugte folgende Ausgabe:
object(Cake\ORM\Entity)[365]
public 'user_role_name' => string 'ADMIN' (length=5)
public 'active' => int 1
object(Cake\ORM\Entity)[365]
public 'user_role_name' => string 'ADMIN' (length=5)
public 'active' => int 1
Dabei war der Fehler so lächerlich simpel: Ich habe einfach aus alter Gewohnheit im Plural gearbeitet.
User
Users
und Member
Members
. Im Grunde ist die Idee korrekt, da das Model ja eine Datenbanktabelle beschreibt und in dieser viele Objekte (Entities) gespeichert werden. Demnach sollte der Entwickler die Tabelle auch users
und nicht user
nennen.
CakePHP zwang in Versionen vor 3.0 die Nutzer zu der Konvention der Bezeichnung. Mit der Version 3.0, die auch viele weitere Vorteile bringt, ist dieser Zwang weggefallen. Die Konventionen, die CakePHP noch nutzt, sind auf der Übersicht CakePHP Conventions aufgelistet und eigentlich intuitiv.
Wenn also patchEntity
nicht funktioniert, einfach mal die Namen der Tabelle bzw. des Entities (wobei hier weniger das Problem liegen dürfte) überprüfen, ob diese mit dem Tabellennamen in der Datenbank übereinstimmen.
Natürlich sollten die Felder auch nicht durch $_accessible
in der Entity gesperrt werden. Nur so als kleiner Hinweis am Rande ;)
Beitragsbild von Free-Photos Pixabay. CC0 Creative Commons: Freie kommerzielle Nutzung, kein Bildnachweis nötig