在我的 CakePHP 1.2.5 应用程序中,我有一个Profile
模型属于User
模型。用户模型有一个username
字段,并且当执行find()
在 Profile 模型上,我希望始终自动检索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']
已正确更新,但未检索用户名数据。我研究了 CakePHP 的核心代码find()
方法,我发现beforeFind()
回调在所有行为的回调之后被调用,这意味着 Containable 已经对 的值做了它需要做的事情$queryData['contain']
在我能够修改它之前。
我怎样才能在不破坏核心的情况下解决这个问题?
我解决了这个问题,所以这是我的答案,以防有人有同样的并发症。无法在 beforeFind 中指定可包含字段,因为所有行为'beforeFind()
方法被称为prior到模型的beforeFind()
method.
因此,我有必要修改find()
方法直接在配置文件模型上,以便附加我的自定义可包含字段。
public function find($conditions = null, $fields = array(), $order = null, $recursive = null) {
$this->contain("{$this->User->alias}.{$this->User->displayField}");
return parent::find($conditions, $fields, $order, $recursive);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)