Dans mon application CakePHP 1.2.5, j'ai un modèle Profile
qui appartient à un modèle User
. Le modèle User a un champ username
et lors de l'exécution d'un find()
sur le modèle Profile, je souhaite toujours récupérer automatiquement la valeur de User.username
. Je suppose qu'il serait logique de modifier la méthode beforeFind()
de mon modèle de profil pour contenir automatiquement le champ désiré.Modification des champs Containable requis dans le rappel beforeFind?
Voici ce que je tentais de le faire:
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;
}
Je peux voir que la valeur de $queryData['contain']
est correctement mis à jour, mais les données de nom d'utilisateur n'est pas récupéré. J'ai regardé dans le code de base de CakePHP pour la méthode find()
, et j'ai trouvé que le rappel beforeFind()
est appelé après tous les rappels de Behaviors, signifiant que Containable a déjà fait ce qu'il avait besoin de faire avec la valeur de $queryData['contain']
avant que je puisse le modifier .
Comment est-ce que je peux contourner ceci sans hacker le noyau?
Merci! Je me demandais aussi si la modification de beforeFind() était "trop tard". En effet, c'était. – Wayne