Doctrine QueryBuilder:多对一关系,其中多个子实体必须匹配

2023-12-23

我正在尝试在有实体的地方进行查询Job和一个实体JobProperty其中 1Job可以有很多JobProperties.

使用 Doctrine 和 Symfony2 查询多对多关系 https://stackoverflow.com/questions/26549120/query-on-a-many-to-many-relationship-using-doctrine-with-symfony2解释如何根据一个实体的子实体的值检索该实体的匹配项。由此我构建了查询:

$qb = $this->getDoctrine()->getRepository('AppBundle:Job')->createQueryBuilder('job')
->innerJoin('job.properties','property');

foreach($filters as $label => $value)
{
    $qb->andWhere('property.label = :label AND property.value = :value')
    ->setParameter('label',$label)
    ->setParameter('value',$value);
}

上面的查询在一定程度上有效,但它提供属性与任何过滤器匹配的结果,而不仅仅提供所有过滤器匹配的结果。我需要它只返回所有过滤器都匹配的结果。

我可能必须以不同的方式解决这个问题,但我不确定我是否会实施。


您没有正确执行此操作,您将标签和值与最后一个过滤器值相匹配,因为占位符:label , :value查询中使用的标签对于每次循环迭代都不是唯一的,因此循环生成的所有子句都将与最后一个标签和值匹配。

要获取每个属性与提供的过滤器匹配的职位,您可以编写类似于下面的学说查询的内容。

首先,它将收集单独数组中的所有标签和值,然后使用以下方法与作业的属性进行匹配IN()操作,最后要获取属性与所有过滤器匹配的作业,您需要构建聚合来对匹配结果进行计数,并且应等于过滤器的数量

$qb =  $this->getDoctrine()
            ->getRepository('AppBundle:Job')
            ->createQueryBuilder('job')
            ->innerJoin('job.properties','p');
$labels = array();
$values = array();
foreach($filters as $label => $value)
{
    $labels[] = $label;
    $values[] = $value;
}
$qb->addSelect('COUNT(DISTINCT  p.id) AS total_properties')
   ->andWhere('p.label IN (:labels)')
   ->andWhere('p.value IN (:values)')
   ->addGroupBy('job.id')
   ->having('total_properties = '.count($filters))
   ->setParameter('labels',$labels)
   ->setParameter('values',$values)
   ->getQuery()
   ->getResult();

这是另一个与您的问题类似的答案作为参考Symfony2 - Doctrine2 QueryBuilder WHERE IN ManyToMany field https://stackoverflow.com/questions/25576818/symfony2-doctrine2-querybuilder-where-in-manytomany-field/25577184#25577184

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

Doctrine QueryBuilder:多对一关系,其中多个子实体必须匹配 的相关文章

  • 如何让Apache服务index.php而不是index.html?

    如果我将以下行放入index html文件 使 Apache 包含index php file 参观index html页面向我显示了这个 这是为什么 为什么它实际上不包含 PHP 文件 正如其他人指出的那样 您很可能没有 html设置为处
  • 使用 ImageMagick 和 PHP 将 PNG 转换为 JPG 并将透明背景设置为白色

    将图像从 PNG 转换为 JPEG 时 如何使用 ImageMagick 带有 php 扩展 将透明背景设置为白色 在撰写本文时 您尚未指定正在使用哪个扩展 但如果您使用命令行 则命令将是 convert image png backgro
  • PHP 无法打开流:是一个目录

    非常简单的 PHP 脚本 我在我亲自设置的 Ubuntu Web 服务器上的 EE 模板中运行 我知道这与权限有关 并且我已经将我尝试写入的目录的所有者更改为 Apache 用户 我得到的错误是 遇到 PHP 错误 严重性 警告 消息 fi
  • PHP 无法加载动态库“php_pdo_oci.dll”

    我在 Windows 8 上运行 Apache 2 4 7 和 PHP 5 5 9 我安装了 PHPUnit 并开始弹出此警告图像 警告 是的 我在 php ini 中启用了扩展加载以及 extension dir 以更正文件夹 并且该文件
  • 未传递“client_reference_id”参数

    我使用 Stripe Checkout Stripe 版本 2016 07 06 我想通过参数 client reference id 恢复个性化数据 但在 JSON 中 当我有金额或电子邮件时 我找不到它 我是在测试环境中 你能帮我吗 先
  • 如何使用 MySQL 选择有特定值的 2 个连续行?

    我正在构建一个系统 该系统应该显示学生何时连续缺席两天 例如 此表包含缺勤情况 day id missed 2016 10 6 1 true 2016 10 6 2 true 2016 10 6 3 false 2016 10 7 1 tr
  • 使用 PHP PayPal REST API 退款?

    我正在开发一个集成到 PayPal 的 REST API 中的 PHP 应用程序 我正确处理了事务并将事务 ID 保存到 MySQL 数据库中 我现在正在尝试退款 但无法让它停止给出 传入 JSON 请求未映射到 API 请求 错误 有人对
  • 如何从 MySQL 数据查询创建 XML 文件?

    我想知道一种仅使用 MySQL 查询创建 XML 文件的方法 根本不使用任何脚本语言 有关于这个主题的书籍 教程吗 UPDATE 我想澄清一下 我想使用 sql 查询将 XML 数据转发到 php 脚本 Here s 关于从 MySQL S
  • MySQL如何获取unix时间戳的时间差

    我有一个保存值1506947452的变量 需要使用公式从该日期提取分钟 started data now date 但started date采用unix时间戳格式10位int数字 我以ajax形式收到并需要放入mysql查询i试试这个 S
  • 对 SimpleXML 数据进行排序和分组

    我正在对 XML 文件中的出版物数据进行排序和分组 我目前使用的方法效果很好大部分情况下 尽管我觉得有一种更有效的方法来完成我想要完成的任务 以下是目标节点的示例
  • 研究MySQL、SQLite源码了解RDBMS实现[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我知道实现数据库是一个很大的话题 但我想通过研究数据库系统的源代码来基本了解数据库系统的工作原理 例如
  • Facebook PHP SDK - 如何获取访问令牌?

    我正在尝试从我的应用程序在用户的 Facebook 墙上发帖 用户授予应用程序在他的墙上发布的权限 并且我在数据库中有用户ID 我需要自动发送帖子 而无需用户再次登录 我的代码是 try require once dirname FILE
  • 如何通过php获取网页的Open Graph协议?

    PHP 有一个简单的命令来获取网页的元标记 get meta tags 但这仅适用于具有名称属性的元标记 然而 开放图谱协议如今变得越来越流行 从网页获取 opg 值的最简单方法是什么 例如 我看到的基本方法是通过 cURL 获取页面并使用
  • 如何将 Smarty 3 包含到 Laravel 4 中?

    我是 Laravel 的新手 所以仍在习惯这些概念 但是我有大约 10 年的使用 Smarty 的经验 所以我希望利用这一点 除了事实上 Blade 似乎缺乏太多我发现有用且在 Smarty 中开箱即用的功能 但无论如何除了这个问题的要点之
  • 如何通过ssh检查ubuntu服务器上是否存在php和apache

    如何通过ssh检查Ubuntu服务器上apache是 否安装了php和mysql 另外如果安装的话在哪个目录 如果安装了其他软件包 例如 lighttpd 那么它在哪里 确定程序是否已安装的另一种方法是使用which命令 它将显示您正在搜索
  • WordPress 自定义帖子类型未显示在搜索结果中

    我在 WordPress 中遇到自定义帖子类型 测验 和搜索的问题 自定义帖子类型未显示在我的搜索结果页面中 我的搜索结果中仅显示默认的帖子内容 以下是我使用的代码 函数 php函数create posttype register post
  • 使用函数的 SQL 查询 - 如何获取列表的最大计数

    如何查询 MAXIMUM COUNT 交易次数 我的代码如下 SELECT customer id COUNT customer id FROM rental GROUP BY customer id HAVING MAX COUNT cu
  • 选择获取与 MySQL Group 中 max 对应的整行

    当我使用Max使用后查找特定 MySQL 组中字段的最大值GROUP BY 是否可以获取包含最大值的整行 我在处理一些论坛代码时偶然发现了这个线程 我想获取每个线程的最新帖子并将其显示在特定板的线程列表中 Quassnoi上面的回答对我非常
  • 如何清除 APC 缓存而不使 Apache 崩溃?

    如果 APC 存储大量条目 清除它们会导致 httpd 崩溃 如果 apc clear cache user 花费的时间超过 phps max execution time 调用 apc clear cache 的脚本 将在之前被 php
  • 使用 PHP 将 latin1_swedish_ci 转换为 utf8

    我有一个数据库 里面充满了类似的值 Dhaka 应该是 Dhaka 因为我在创建数据库时没有指定排序规则 现在我想修复它 我无法从最初获取数据的地方再次获取数据 所以我在想是否可以在 php 脚本中获取数据并将其转换为正确的字符 我已将数据

随机推荐

  • 自动刷新过滤器

    我正在使用过滤器来显示添加内容后的时间 angular module filters fromNow function return function date return moment date fromNow 如何每分钟自动触发过滤器
  • 如何解决 YACC 移位/减少后增量运算符的冲突?

    我正在用 YACC 实际上是 Bison 编写语法 并且遇到了移位 归约问题 它是包含后缀递增和递减运算符的结果 这是语法的精简版本 token NUMBER ID INC DEC left left right PREINC left P
  • 我是否在 java.io.PipedInputStream 中发现了错误?

    我不确定 但我非常确定我在 Oracle Java 实现中发现了一个错误 或未记录的功能 我可以验证 1 7 0 67 和 1 8 0 31 是否受影响 症状 当管道已满时 对管道的写入可能会比管道再次空闲所需的时间多等待一秒 该问题的一个
  • iPhone SDK 3.0 - wait_fences:未能收到回复:10004003 [重复]

    这个问题在这里已经有答案了 我一直在开发 iPhone 应用程序 自从我开始在 SDK 3 0 上构建以来 每当应用程序尝试与我的网络服务器通信时 我都会收到此错误 一切似乎都运行良好 但我找不到任何可以解释该消息的根本原因的内容 任何帮助
  • 使用 userEvent.click 错误的 act() 警告响应测试库

    我有几个用 Jest 和 React 测试库编写的测试 它们都模拟获取并使用 userEvent click 调用来触发发出获取请求的提交按钮 组件中的状态得到更新 我做出断言 我正在使用 useEffect 挂钩来填充数据数组 但它仅在初
  • 如何使用 Youtube v3 API 获取 Youtube 视频的 mp4 url

    如何获取完整的 mp4 url 以使用除 Youtube 之外的其他来源从应用程序中的实际位置播放视频 gdata youtube API 已被弃用 所以我遇到了麻烦 任何帮助将不胜感激 谢谢 我做了一个非常简单的API https gis
  • 如何将休眠与 MS Access 结合使用?

    我想将休眠与 MS Access 一起使用 我应该使用哪种方言 您能给我一个带有 MS Access 的休眠配置文件示例吗 实际解决方案在这里 在花了 1 天尝试不同的解决方案 ODBC HXTT 等之后 我发现了这个美妙之处 http u
  • ASP.NET Core 路由不起作用

    路由器的配置方式如下 app UseMvc routes gt routes MapRoute name api template api action id app UseMvc routes gt routes MapRoute nam
  • 为什么 nl_langinfo(CODESET) 与 locale charmap 不同?

    此帖源自如何获取您的系统在 c c 中使用哪种编码 https stackoverflow com questions 1492918 how do you get what kind of encoding your system use
  • 从 Excel 单元格读取

    我在用EPPlus http epplus codeplex com 用于从 xlsx 文件读取的包 我需要从单元格中读取 TimeSpan 对象 Excel 单元格将包含 hh mm 格式的数据 例如 09 00 或 18 30 不带引号
  • Lua Web 开发使用什么 Web 服务器 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Zend_Paginator 作为对象返回

    Zend Paginator 将结果作为标准数组返回 但我需要使结果作为类的实例返回 我该怎么做 例如 我想要所有新闻文章 因此需要我的项目作为 News Model Article 的实例返回 您还可以创建自定义 zend paginat
  • 如何从网页中的多个表中抓取内容

    我想从网页中的多个表中抓取内容 HTML 代码如下所示 div class fixtures table full table medium h2 class table header Date 1 h2 table class table
  • 解释基本 Prolog 结果

    我对 Prolog 的基础知识感到困惑 如果我有这个知识库 loves vincent mia loves marcellus mia loves pumpkin honey bunny loves honey bunny pumpkin
  • 当软键盘出现时,工具栏向上移动

    我想让我的活动布局在键盘出现时调整大小 但同时保持其工具栏位置不变 到目前为止 当我单击编辑文本并出现键盘时 所有屏幕都会向上移动 Before keyboard appears 键盘出现后 工具栏不再可见 我想将键盘保留在其位置并将图像移
  • 从 Git 存储库中删除已从磁盘删除的多个文件

    我有一个 Git 存储库 已删除了四个使用中的文件rm not git rm 我的 Git 状态如下所示 deleted file1 txt deleted file2 txt deleted file3 txt deleted file4
  • Go:如何检查结构体属性是否显式设置为零值?

    type Animal struct Name string LegCount int snake Animal Name snake LegCount 0 worm Animal Name worm 问题 我怎样才能检查snake and
  • 如何延长一条线与多边形相交?

    我想延长线以接触多边形 创建直线和多边形 直线和多边形 这是我的 拉伸和修剪 解决方案 结果比我最初提供的第一个 解决方案 要棘手一些 我还包括了水平线和垂直线的情况 我认为我的例子涵盖了all案例 线方向 我的编码非常简单 没有努力提高效
  • C# 结构体中的数组

    想要这样做 编辑 错误的示例代码 忽略并跳过下面 struct RECORD char name new char 16 int dt1 struct BLOCK char version new char 4 int field1 int
  • Doctrine QueryBuilder:多对一关系,其中多个子实体必须匹配

    我正在尝试在有实体的地方进行查询Job和一个实体JobProperty其中 1Job可以有很多JobProperties 使用 Doctrine 和 Symfony2 查询多对多关系 https stackoverflow com ques