06 Jul
Posted by dirk.olbertz as Uncategorized
Statt sich mit find() Anweisungen herumzuschlagen, passiert es gerade Anfängern immer wieder, dass sie statt dessen lieber direkt ein SQL-Statement mittels query() oder execute() ausführen.
Das solltet ihr aber wirklich nicht tun!
Mit einem Kollegen hatte ich darüber viele Diskussionen, weil ich auch lieber direkt das SQL angegeben habe, aber dann brachte er irgendwann das ultimative Argument:
Du [...]
Die Model-Funktionen findCount() und findCountAll() berücksichtigen die Model-Relation belongsTo, was zu ungewollten Effekten führt, da dies zu einigen JOINs in der Datenbankabfrage resultiert und somit mehr oder weniger Resultate liefert, als eigentlich beabsichtigt.
Deshalb sollte man auch vor einem findCount() auf expects() zurückgreifen, um nur die Models zu berücksichtigen, die auch gewollt sind:
$this->MeinModel->recursive = 0;
$this->MeinModel->expects(’MeinModel’);
$anzahl = [...]
Die Relationen bei CakePHp Models sind ein grundlegendes Feature und definieren, wie Models untereinander verbunden sind.
Sämtliche find-Methoden aus Cake (auch findCount() und read()) benutzen diese Informationen, um verbundenen Models zu holen. Grundsätzlich eine prima Sache, aber bei komplexeren Datenstrukturen und Rekursionslevel von 2, kann da ein einfaches find() ganz schön viel Daten zurückliefern.
In der Praxis [...]