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 behilft man sich dann meistens mit unbindModel() und bindModel(). Hat man in seinen Models alle Relationen aufgeführt, benutzt man vor jedem find() ein unbindModel() um überflüssige Models zu entfernen. Der andere Weg wäre, die Relationen im Model ganz weg zu lassen und dann jeweils gezielt mit bindModel zu spezifizieren, welche Models benötigt werden.

Letzeres ist aber nicht wirklich erstrebenswert, weil damit in der Applikationslogik verborgen ist, wie die Models untereinander verbunden sind. Bliebe also nur, die unnötigen Models vor einem find() mit unbindModel() zu entfernen. Das ist aber dann problematisch, wenn in die Applikation immer mal wieder neue Models und Relationen eingepflegt werden. Denn dann müsste man diese neuen Relationen bei Bedarf (bzw. Nicht-Bedarf) in den unbindModel()-Aufrufen ebenfalls nachpflegen.

Alles in allem also irgendwie ziemlich unbefriedigend. Das hat sich auch Mariano Iglesias gedacht und expects() erdacht. Mit expects() hat man die Möglichkeit genau zu spezifizieren, welche Models beim nachfolgenden find() geholt werden sollen. Es ist damit nur eine andere Notation für bindModel() und undbindModel(). Aber wesentlich einfacher gehalten, da in den Models weiterhin die Art der Relation (belongsTo, hasMany, etc.) spezifiziert wird und mittels expects() nur noch die in der Rückgabe erwarteten Models spezifiziert werden.

expects() wird im AppModel eingefügt, man bleibt damit also unabhängig von CakePHP selbst, was einem regelmäßige Updates von CakePHP erleichtert.

Bei oben verlinktem Beitrag zu expects() sollte man unbedingt auch die Kommentare lesen, weil sie noch ein paar wichtige Fragen und Hinweise enthalten.