Ändern von Containable-Feldern in beforeFind-Rückruf erforderlich?

In meiner CakePHP 1.2.5 App habe ich eineProfile Modell, das zu einem gehörtUser Modell. Das Benutzermodell hat eineusername Feld und bei der Durchführung einesfind() Beim Profilmodell möchte ich immer automatisch den Wert von abrufenUser.username auch. Ich denke, es wäre sinnvoll, die meines Profilmodells zu ändernbeforeFind() Methode, um das gewünschte Feld automatisch zu enthalten.

Folgendes habe ich versucht:

public function beforeFind($queryData) {
    // determine if the username data was already requested to be included in the return data via 'User.username' or 'User' => array('username').
    $hasUserData  = isset($queryData['contain']) && in_array("User.{$this->User->displayField}", $queryData['contain']);
    $hasUserData |= isset($queryData['contain']['User']) && in_array($this->User->displayField, $queryData['contain']['User']);

    // request the the username data be included if it hasn't already been requested by the calling method
    if (!$hasUserData) {
        $queryData['contain']['User'][] = $this->User->displayField;
    }

    return $queryData;
}

Ich kann sehen, dass der Wert von$queryData['contain'] wird ordnungsgemäß aktualisiert, aber die Benutzername-Daten werden nicht abgerufen. Ich habe mir den CakePHP-Kerncode für das angesehenfind() Methode, und ich fand, dass diebeforeFind() callback wird nach allen Rückrufen von Behaviors aufgerufen, was bedeutet, dass Containable bereits das getan hat, was für den Wert von erforderlich ist$queryData['contain'] bevor ich es ändern konnte.

Wie kann ich das umgehen, ohne den Kern zu hacken?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage