gpt4 book ai didi

php - 修改 beforeFind 回调中所需的 Containable 字段?

转载 作者:可可西里 更新时间:2023-11-01 00:27:56 31 4
gpt4 key购买 nike

在我的 CakePHP 1.2.5 应用程序中,我有一个属于 User 模型的 Profile 模型。 User 模型有一个 username 字段,当对 Profile 模型执行 find() 时,我希望始终自动检索 User.username< 的值 也是。我认为修改我的 Profile 模型的 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 核心代码,我发现 beforeFind() 回调在所有行为的回调之后被调用,这意味着 Containable 已经在我能够修改它之前,对 $queryData['contain'] 的值做了它需要做的事情。

如何在不破解核心的情况下解决这个问题?

最佳答案

我解决了它,所以这是我的答案,以防有人遇到同样的问题。无法在 beforeFind 中指定可包含的字段,因为所有行为的 beforeFind() 方法都是在模型的 beforeFind() 方法之前调用的。

因此,我有必要直接在 Profile 模型上修改 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);
}

关于php - 修改 beforeFind 回调中所需的 Containable 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1591569/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com