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

2024-01-09

在我的 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(使用前将#替换为@)

修改 beforeFind 回调中所需的 Containable 字段? 的相关文章

随机推荐

  • 原深感摄像头的拍摄范围是多少?

    前置原深感摄像头可以检测到的最小和最大距离是多少 When 检测深度数据 https developer apple com documentation avfoundation cameras and media capture stre
  • WPF - 延迟多重绑定

    我有一个多重绑定 看起来像这样
  • 如何在 Postgres 中获取时间间隔的平均值

    我正在使用 PostgreSQL 9 6 我有一个这样的表 mac sn loc time date vin1 vin2 vin3 1a34 4as11111111 aaaa 7 06 18 1 1 2018 447 42 472 32 6
  • 如何从 xcode 获取自己的应用程序版本?

    我想知道是否有办法在将其放入 xCode 中的 Summary 选项卡后 在代码中获取自己的应用程序版本 一种方法似乎是搜索Info plist for CFBundleVersion关键 但是还有其他更简单 更方便的方法吗 您可以在主包中
  • VB.NET LINQ 按多列分组

    我有以下 LINQ 代码 该代码有语法错误 但我不知道如何修复它 Dim query From row In mainDatatable AsEnumerable the syntax Error is in the following l
  • 保持当前页面呈现,直到加载下一页

    我有一个基于 WebView loadUrl http www example com http www example com 当用户单击 URL 时 默认行为是立即显示空白页面 等待页面加载 然后显示此页面 我设法显示启动屏幕来代替空白
  • POSIX TIMER - 有多个计时器

    我试图在我的系统中有两个计时器用于两个不同的目的 但我不明白为什么它不起作用 有人可以帮助我吗 另外 处理程序代码是否应该是最低限度的 以便任务本身不会干扰滴答声 我还可以定义单独的处理程序吗 include
  • 如何在客户注册表中添加地址字段?

    我使用的是magento 1 6 我想在客户注册表上显示地址字段 我从 register phtml 中删除了以下几行 但它不起作用 所以我该怎么做 如果您使用的是 magento 1 6 或更高版本 并且只需在customers form
  • One-hot 编码多级列数据

    我有以下数据框 其中包含有关不同主题的特征的记录 ID Feature 1 A 1 B 2 A 1 A 3 B 3 B 1 C 2 C 3 D 我想获得另一个 聚合的 数据帧 其中每一行代表一个特定主题 并且有所有单热编码功能的详尽列表 I
  • Cordova 应用程序可以编译,但在运行时崩溃。如何获取错误报告?

    我有一个 Cordova 应用程序 编译时没有错误 然而 当我将应用程序加载到我的 Android 设备上时 它在启动时立即崩溃 当我不知道错误是什么时 我很难进行调试 问题 有没有办法从这次崩溃中获取错误报告 我通常使用 Chrome 来
  • 在哪里以及如何安装 ArcPy for Python 2.7?

    我检查过http www lfd uci edu gohlke pythonlibs http www lfd uci edu gohlke pythonlibs http help arcgis com en arcgisdesktop
  • 如何在 for 循环中追加 pandas 数据框中的行? [复制]

    这个问题在这里已经有答案了 我有以下 for 循环 for i in links data urllib2 urlopen str i read data json loads data data pd DataFrame data ite
  • 如何在 Vim 中进行类似于“grep -w”的全字搜索

    我如何进行全字搜索 例如grep w在 Vim 中 它只返回所寻找的字符串是整个单词而不是较大单词的一部分的行 grep w 仅选择包含构成整个单词的匹配项的行 这可以在 Vim 中完成吗
  • 数据结构:此类练习中 pop、push、dequeue、enqueue 的解释

    我正在努力熟悉这 4 个概念 所以如果我们有一个数组 15 34 23 32 15 5 我们的业务包括 pop push 30 enqueue 40 dequeue 100 pop 只会删除第一个数字 即 15 对吧 如果是 pop 20
  • 如何同时静默对 Rails 控制器操作的调用

    我已经弄清楚如何通过将操作方法 内的所有内容包装在 logger silence 块中来使操作的内容静音 但是 我仍然收到对日志文件中显示的操作的调用 I E Processing DashboardController update fo
  • 如何从 获取持续时间,如 int milli 和 float 秒?

    我正在尝试使用 chrono 库来设置计时器和持续时间 我希望能够拥有一个Duration frameStart 从应用程序启动 和一个Duration frameDelta 帧之间的时间 我需要能够得到frameDelta持续时间为毫秒和
  • 在 Xamarin.iOS 中创建可扩展的表格视图?

    我正在尝试使用创建可扩展的表格视图Xamarin iOS具有手风琴类型的功能 例如 最初会有一些行 点击任何行 单元格将扩展到表视图中的其他一些行 Thanks 嘿 我制作了一个可扩展表格视图的示例here https github com
  • 我可以使用 OpenCL 分配设备内存并在 CUDA 中使用指向内存的指针吗?

    假设我使用 OpenCL 来管理内存 以便 GPU CPU 之间的内存管理使用相同的代码 但我的计算使用优化的 CUDA 和 CPU 代码 不是 OpenCL 我仍然可以使用 OpenCL 设备内存指针并将它们传递给 CUDA 函数 内核吗
  • 学习正确使用VBO

    因此 我一直在尝试自学使用 VBO 以提高 OpenGL 项目的性能并学习比固定功能渲染更高级的东西 但我还没有找到太多像样的教程 到目前为止我发现的最好的是宋浩的教程 http www songho ca opengl gl vbo ht
  • 修改 beforeFind 回调中所需的 Containable 字段?

    在我的 CakePHP 1 2 5 应用程序中 我有一个Profile模型属于User模型 用户模型有一个username字段 并且当执行find 在 Profile 模型上 我希望始终自动检索User username也 我认为修改我的配