私のProfile
CakePHP1.2.5アプリには、モデルに属するモデルがありUser
ます。ユーザーモデルにはusername
フィールドがありfind()
、プロファイルモデルでを実行するときは、常にの値も自動的に取得したいと思いUser.username
ます。beforeFind()
プロファイルモデルのメソッドを変更して、目的のフィールドが自動的に含まれるようにするのが理にかなっていると思います。
これが私がやろうとしたことです:
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;
}
$queryData['contain']
の値が適切に更新されていることがわかりますが、ユーザー名データが取得されていません。find()
メソッドのCakePHPコアコードを調べたところ、すべてのBehaviorsのコールバックの後にコールバックが呼び出されていることがわかりました。つまり、Containableは、変更する前にbeforeFind()
、の値で必要な処理をすでに実行していました。$queryData['contain']
コアをハッキングせずにこれを回避するにはどうすればよいですか?