自定义查找器与关联定义中的匹配?

2024-05-18

我有两个模型:联系人和具有BelongsToMany 关联的组。

我只想获取联系人可以访问的组。为此,我有一个自定义查找器。

public function findAccessible(Query $query, array $options){
    return $query
            ->where(['admin_user_id' => $options['User.id']])
            ->orWhere(['public' => true])
            ->matching('Users', function($q) use ($options){
                return $q->orWhere(['Users.id' => $options['User.id']]);
            });
}

所以我可以打电话给关注,我会得到我想要的。

$accessibleGroups = $this->Contacts->Groups->find('accessible', ['User.id' => $this->Auth->user('id')]);

但如果我有一个包含,那么它将返回所有组,而不仅仅是可访问的组。

$contact = $this->Contacts->get($id, [
        'contain' => ['Groups']
    ]);

如何限制包含可访问?

我无法将自定义查找器添加到表关联定义的查找器属性中,因为我无法在那里传递 $options。或者我可以吗?


让我引用文档和测试(如果您在文档中找不到某些内容,测试通常是有关如何做事情的信息的有用来源)。

http://book.cakephp.org/3.0/en/orm/table-objects.html#passing-conditions-to-contain http://book.cakephp.org/3.0/en/orm/table-objects.html#passing-conditions-to-contain

如果您在关联表中定义了一些自定义查找器方法,则可以在包含内使用它们:

// Bring all articles, but only bring the comments that are approved and
// popular.
$query = $articles->find()->contain([
    'Comments' => function ($q) {
       return $q->find('approved')->find('popular');
    }
]);

在这种情况下,您可以简单地传递条件find()就像您已经在做的那样打电话。


http://book.cakephp.org/3.0/en/orm/table-objects.html#using-the-finder-option http://book.cakephp.org/3.0/en/orm/table-objects.html#using-the-finder-option

https://github.com/cakephp/cakephp/blob/7fc4cfe3ae7d4c523331a44e2862bab5c8f44f1e/tests/TestCase/ORM/QueryTest.php#L2175 https://github.com/cakephp/cakephp/blob/7fc4cfe3ae7d4c523331a44e2862bab5c8f44f1e/tests/TestCase/ORM/QueryTest.php#L2175

所以还有这个“隐藏”finder可以使用选项来代替可调用的:

$table->find('all')
    ->where(['Articles.author_id' => $authorId])
    ->contain([
        'Authors' => [
            'finder' => ['byAuthor' => ['author_id' => $authorId]]
        ]
    ]);

我想如果能在 Cookbook(Cookbook 的文档块)中更详细地记录查找器的使用情况,那不会有什么坏处。Query::contain()也缺少有关它的信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自定义查找器与关联定义中的匹配? 的相关文章

  • 为什么修补/保存时日期/时间值解释不正确?

    我尝试保存 cakephp 3 表单中的数据 所有数据都保存得很好 但日期时间却没有 我有 2 个日期时间字段 这些字段由 jquery ui 小部件填充 问题似乎发生在打包实体时 intervention this gt Interven
  • CakePHP 3.0.8 翻译行为和数据验证(requirePresence,notEmpty)

    我的问题很简单 但我不知道如何解决 我的网站是多语言的 我希望用户能够根据需要添加多种语言的文章 同时需要输入他的语言 取决于他的区域设置 问题是 根据 CakePHP 的翻译约定 所有输入都必须以字段名称结尾 无论哪种语言 所以所有字段对
  • cakePHP 3 查询 ifnull

    我想知道防止结果集中出现空结果的最佳方法是什么 我正在使用 cake 3 5 13 我正在使用案例 例如 private function addCase isforeign source query this gt Sales gt fi
  • 如何在 cakephp 3 中的 sql 查询中添加 ` 字符

    我有一个带有特殊字段名称的表 例如 来自 和 订单 该表与另一个cms一起使用 我无法更改表结构 我想使用 cakephp 3 添加记录 但我收到 数据库错误 看来 cakephp 3 的查询没有用 字符进行净化 我在控制器中的代码 tou
  • 使用翻译行为时如何查询翻译的内容?

    我的网站有多种语言 因此文章的标题取决于当地语言 但有一个问题 如何搜索另一种语言的文章 目前 唯一的方法是输入英文标题 以便 cakePHP 检索法文名称 我无法用法语搜索它 例如 当我搜索 Hello 时 我找到了名为 Bonjour
  • 如何通过cakephp迁移在数据库表中添加字段?

    我对 cakephp 版本 3 非常陌生 这里我尝试使用迁移插件 我已经使用下面的命令创建了一个表 gt cake bake migration CreateUsers name string 它工作得很好 现在我试图在这里添加一个字段 所
  • Cakephp 3 回调方法未到达

    我对 afterDelete 回调方法有疑问 我不能使用它们 在我的一个 存储 插件控制器中 我想删除一条记录 然后我想做一些其他的事情 但没有达到回调方法 我已经通过在 afterDelete 回调方法中添加日志消息来检查这一点 这是我删
  • 如何在Cakephp 3.0中读写Session

    我是蛋糕3 0的新手 我已阅读有关的文档http book cakephp org 3 0 en development sessions html http book cakephp org 3 0 en development sess
  • CakePHP 3 - 如何在验证 NotEmpty 之前使用 Trim()?

    我的表单验证空字段 但如果用户使用 空格 验证会处理一个字符 如何在模型表中使用 Trim 以避免发生这种情况 假设您在 Posts 表中有一个标题列 并且您想在验证之前修剪标题 将以下代码放入 src Model Table PostsT
  • Cake PHP 3 debug_kit 面板

    安装 CakePHP3 版本后 3 6 2 debug kit不显示面板 在日志文件中 警告 DebugKit 正在禁用自身作为您的主机newtest my不在已知的顶级域安全列表中 localhost dev invalid test e
  • CakePHP 3 上未找到“Locale”类问题

    我刚刚下载了文件这个链接 http bakery cakephp org articles lorenzo 2014 09 28 cakephp 3 0 0 beta2 released 提取并尝试执行 但出现此错误 Fatal error
  • CakePHP 连接在浏览器中被拒绝

    我正在第一次设置 学习 CakePHP 我正在努力弄清楚为什么我无法通过默认端口 8765 访问我的服务器 我喜欢在 ubuntu 机器上进行开发并远程处理代码 该服务器托管在我本地计算机上的虚拟机上 但我将其称为远程计算机 服务器和我的远
  • cakephp 3 显示没有时间的日期

    CakePHP 3 我有一个数据库字段 它是日期 不是日期时间也不是时间戳 当我显示 echo contact gt date 它会显示类似的内容2014 01 06 0 00 如何隐藏小时和分钟 I tried print this gt
  • cakephp 3.x 级联删除不起作用

    我有 3 个表 分别为文章 评论 地址 articles gt fields id title body comments gt fields id article id comment addresses gt fields id art
  • 将额外数据传递给 finder auth

    我的发现者来自Auth有我需要访问的条件 this gt request但我无权访问UsersTable 应用控制器 初始化 this gt loadComponent Auth authenticate gt Form gt finder
  • 如何获取 CakePHP 3.0 中最后一个插入 ID?

    使用 CakePHP 3 0 beta 似乎是一个简单的问题 但我搜索了文档但找不到任何东西 使用 this gt Model gt save 插入新记录后 我想获取新创建记录的 auto increment 主键 ID 使用 Cake 2
  • cakephp 3.0 如何使用值而不是 id 填充选择字段

    我一直在寻找以前的答案 但我找到的答案与旧的 cakephp 版本有关 我有两个表 杂志 和 问题 其中存在关系 问题 属于 杂志 问题表如下所示 public function initialize array config this g
  • 自定义查找器与关联定义中的匹配?

    我有两个模型 联系人和具有BelongsToMany 关联的组 我只想获取联系人可以访问的组 为此 我有一个自定义查找器 public function findAccessible Query query array options re
  • 如何在索引视图中打印关联数据

    subjects this gt Subjects gt find all contain gt Users fields gt Users username Users email gt hydrate false gt toArray
  • 如何使用多个Auth组件?

    我使用用户模型将身份验证组件配置为 管理页面 但现在 我还想为客户端创建 配置身份验证 我尝试 重写 inialize This is in my ClientsController php public function initiali

随机推荐

  • 如何使用 R 将每个文件的数据添加为附加行,从而将不同的 .csv 文件合并为一个完整的文件?

    我有几个不同的文件夹 它们都包含一个 csv 文件 所有这些 csv 文件都有一个单独的列 其中包含实验的一种条件的数据 我想以将每个文件的数据添加为新列的方式合并这些 csv 文件 目前 它看起来像这样 C1 csv 102 106 15
  • Django 选择性转储数据

    是否可以有选择地过滤哪些记录Django的dumpdata管理命令输出 我有几个模型 每个模型都有数百万行 我只想转储一个模型中符合特定条件的记录 以及引用任何这些记录的所有外键链接记录 考虑这个用例 假设我有一个生产数据库 其中我的用户模
  • 有没有办法使用 Vue-Router 从动态 URL 中删除目录?

    我为一家保险经纪公司构建了一个 vue js Web 应用程序 其中每个代理人都有自己的网站 该网站是根据他们的个人资料生成的 这就是我的 vue router 索引文件中的链接的样子 path agents id name AgentSi
  • 如何将 'IN (1,2,3)' 与 findAll 一起使用?

    我需要从数据库中获取几个学生 并且我将他们的主键放在以逗号分隔的字符串中 通常使用 SQL 会是这样的 cleanedStudentIdStringList 1 2 3 4 SELECT FROM Student WHERE id IN c
  • Erlang gen_tcp 连接问题

    简单的问题 这段代码 client gt SomeHostInNet localhost to make it runnable on one machine ok Sock gen tcp connect SomeHostInNet 56
  • 如何使用 Coffeescript 在 React 中渲染 HTML 标签?

    我目前正在学习 ReactJS 以及如何使用 Ruby on Rails 作为其后端 所以如果我做出愚蠢的假设 我深表歉意 请随意责骂我 我正在关注一个教程 其中作者使用 Coffeescript 而不是 ES6 来处理他的 ReactJS
  • 列出 grunt.js 任务

    我正在尝试弄清楚如何打印所有可用的 grunt 任务的列表 如果使用耙子 则为 rake T grunt 相当于什么 例如 grunt T concat jasmine minify grunt help列出可用的任务
  • 在一个后台为MYSQL的网站上集成搜索

    我有一个位置搜索website http www jammulinks com对于一个城市 我们首先收集该城市所有可能类别的数据 如学校 学院 百货商店等 并将其信息存储在单独的表中 因为每个条目除了名称 地址和电话号码外都有不同的详细信息
  • server-conn 和 client-conn 通道是唯一可以拥有多个实例的通道吗?

    我无法找到获取其他频道类型的方法 例如发送者通道 可以是多个实例 没有任何记录反对这一点 我假设只有连接通道可以有多个实例 它是否正确 Thanks 可以具有多个实例的通道包括客户端使用的通道 MQI 通道 和 QMgrs 使用的通道 MC
  • 我在哪里可以获得可靠的熵来源(真正的随机性字节[])?

    目前 我正在寻找一种方法来增加随机性的质量 in my Android应用程序 纸牌游戏 之前 估计对于我的情况 52 排列 至少需要 226 位熵 226 个随机位 我打算用这个byte 作为种子SecureRandom SecureRa
  • Helm 3 图表安装错误:验证数据时出错:未设置 apiVersion

    我有一个简单的 helm 图表 它将通过 docker 桌面将应用程序部署到我的 kubernetes 本地副本 如果我使用 kubectl 一次部署一个 yaml 文件 一切都会正常工作 但是 当我尝试创建 helm 图表以方便部署时 出
  • Fancybox - Ajax 图片库

    我有一个自定义图像库 它用缩略图填充 div 每个缩略图都包含在一个 fancybox 组中 当您单击一个 它在 fancybox 中打开 时 您可以按 上一张 下一张 在第一 页面 上的图像之间循环 要在页面之间移动 您必须关闭 fanc
  • 融化R中的下半矩阵

    如何融化下半三角形加对角矩阵 11 NA NA NA NA 12 22 NA NA NA 13 23 33 NA NA 14 24 34 44 NA 15 25 35 45 55 A lt t matrix c 11 NA NA NA NA
  • HTML5

    我想在随机位置开始和停止 HTML5 播放 并具有淡入和淡出周期 以平滑聆听体验 为此存在什么样的机制 使用 setTimeout 手动增加音量 jQuery 的方式 audio animate volume newVolume 1000
  • C++ 使用 Windows 命名管道

    由于某种原因 桅杆和从属装置都失败了 但是我可以找到任何关于它们如何工作的好例子 所以我不确定我哪里出了问题 在 ConnectNamedPipe 之后 主设备永远不会退出 WaitForSingleObject 并且从设备在第一个 boo
  • 为什么图的 C++ 数据结构隐藏连续的整数索引?

    有向图和无向图的数据结构至关重要 众所周知且广泛使用的实现 例如Boost图库 http www boost org doc libs 1 56 0 libs graph doc table of contents html and Lem
  • Parse.com 和 Facebook 登录,运行无限循环

    我将 Parse 和 Facebook iOS SDK 都更新到了最新版本 当我尝试使用 Facebook 登录时 我的应用程序崩溃了 从调试器中我可以看到它正在无限循环中调用 3 4 个方法 我的登录代码如下所示 void openSes
  • IntelliJ - 以 Sudo 身份运行程序

    使用 Java 和 IntelliJ 在 OSX 上开发程序 处理网络套接字和 ICMP 因此 该程序需要在 OSX 上以 root 或 sudo 身份运行 程序可以在 sudo 下从 IntelliJ 外部的终端窗口正常运行 但是 我想从
  • 赋值运算符“=”是原子的吗?

    我正在使用全局变量实现线程间通信 global var volatile bool is true true thread 1 void thread 1 while 1 int rint rand 10 if is true cout l
  • 自定义查找器与关联定义中的匹配?

    我有两个模型 联系人和具有BelongsToMany 关联的组 我只想获取联系人可以访问的组 为此 我有一个自定义查找器 public function findAccessible Query query array options re