在我的 CakePHP 1.2.5 应用程序中,我有一个属于Profile
模型的User
模型。User 模型有一个username
字段,find()
在 Profile 模型上执行 a 时,我也希望始终自动检索其值User.username
。beforeFind()
我认为修改我的 Profile 模型的方法以自动包含所需的字段是有意义的。
这是我试图做的事情:
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 核心代码,发现beforeFind()
在所有 Behaviors 的回调之后调用了回调,这意味着$queryData['contain']
在我能够修改它之前,Containable 已经完成了它需要对 的值做的事情。
我怎样才能在不破解核心的情况下解决这个问题?