Gestern stand ich vor dem Problem, obige Relation in CakePHP zu realisieren. Mit hasMany und belongsTo geht das zwar grundsätzlich, die Tücke steckt aber im Detail: wenn man sich eine Gruppe lädt, holt CakePHP bei Bedarf auch alle User mit, die in diese Gruppe gehören. Wo aber soll der GroupMaster gespeichert werden, wenn User schon für die zur Gruppe zugehörigen User belegt ist?

Die Lösung sieht so aus:

class Group extends AppModel {
    var $name = 'Group';
    var $hasMany = array('User');
    var $belongsTo = array (
              'GroupMaster' => array (
                  'className' => 'User',
                  'foreignKey' => 'group_master'
              )
          );
}

Über die Relation hasMany werden die zur Gruppe gehörigen User automatisch geladen, der GroupMaster wird über die Relation belongsTo bestimmt.