QueryBuilder/Doctrine 选择加入 groupby

2024-04-21

所以最近我一直在思考,但还找不到这个问题的解决方案,因为我缺乏对doctrine2和symfony查询生成器的开发。

我有 2 张桌子: 目标:id、user_id、target_value... 储蓄:id、goal_id、金额

我需要从目标中进行选择(我的表中的所有信息都来自目标表,除了我需要从每个目标的储蓄表中计算总和(金额),这样我可以向用户显示做了多少他为了自己的目标而储蓄)

这是 MySQL 查询:

    select 

    admin_goals.created,
    admin_goals.description,
    admin_goals.goal_date,
    admin_goals.value,
    admin_goals.budget_categ,
    sum(admin_savings.value) 

    from admin_goals 
inner join admin_savings on admin_savings.goal_id=admin_goals.id 
    where admin_goals.user_id=1 
    group by admin_goals.id

It returns what I want but I have no idea how to implement it with doctrine or query builder, can you please show me an example in both ways? enter image description here I highly appreciate it ! enter image description here


我假设您只需要这个字段,而不需要您的AdminGoals实体。在你的AdminGoalsRepository你可以这样做:

public function getGoalsByUser(User $user) 
{
    $qb = $this->createQueryBuilder('goal');
    $qb->select('SUM(savings.value) AS savings_value')
       ->addSelect('goal.created')
       ->addSelect('goal.description')
       ->addSelect('goal.goalDate')
       ->addSelect('goal.value')
       ->addSelect('goal.budgetCat') //is this an entity? it will be just an ID
       ->join('goal.adminSavings', 'savings', Join::WITH))
       ->where($qb->expr()->eq('goal.user', ':user'))
       ->groupBy('goal.id')
       ->setParameter('user', $user);

    return $qb->getQuery()->getScalarResult();
}

请记住,返回对象将是一个行数组,每行都是一个关联的数组,其键与上面的映射类似。

Edit

更新问题后,我将更改我建议的功能,但如果其他人想看到差异,我将保留上面的示例。

首先,因为这是一个单向的 ManyToOneAdminSavings and AdminGoals,自定义查询应该位于AdminSavingsRepository (不像上面那样)。另外,既然你想要一个聚合字段 http://doctrine-orm.readthedocs.org/en/latest/cookbook/aggregate-fields.html这会"break"您的一些数据获取。当您不仅仅是渲染模板时,请尝试保持尽可能多的 OOP。

public function getSavingsByUser(User $user)
{
    $qb = $this->createQueryBuilder('savings');
    //now we can use the expr() function
    $qb->select('SUM(savings.value) AS savings_value')
       ->addSelect('goal.created')
       ->addSelect('goal.description')
       ->addSelect('goal.goalDate')
       ->addSelect('goal.value')
       ->addSelect('goal.budgetCat') //this will be just an ID
       ->join('savings.goal', 'goal', Join::WITH))
       ->where($qb->expr()->eq('goal.user', ':user'))
       ->groupBy('goal.id')
       ->setParameter('user', $user);

       return $qb->getQuery()->getScalarResult();
}

Bonus

public function FooAction($args) 
{
    $em = $this->getDoctrine()->getManager();
    $user = $this->getUser();
    //check if user is User etc depends on your config
    ...

    $savings = $em->getRepository('AcmeBundle:AdminSavings')->getSavingsByUser($user);

    foreach($savings as $row) {
        $savings = $row['savings_value'];
        $goalId =  $row['id'];  
        $goalCreated = $row['created'];
        [...]
    }
    [...]
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QueryBuilder/Doctrine 选择加入 groupby 的相关文章

  • 如何在 GitHub Action 中使用不同版本的 PHP 进行测试

    我有一些 PHP 代码 其中包含使用以下命令运行的测试PHPUnit并想对其进行测试GitHub Actions 我在他们的文档中找不到测试 PHP 包的方法 我想使用不同版本的 PHP 进行测试 但他们只有最新的版本7 3安装 您可以添加
  • 使用 PHP/linux 将文件合并为单个 PDF

    我正在研究如何将多个 PDF 合并为一个 PDF 我正在寻找一个图书馆可靠且坚固尽可能 最好有一个库可以保留书签 鬼脚本 http pages cs wisc edu ghost 可以在保存书签的位置进行连接 但我遇到了麻烦 在一种情况下它
  • 使用 PHP glob 列出 FTP 服务器上的文件不起作用

    我使用此代码来访问目录 location files pictures glob location png 我想使用 FTP 访问远程路径 location opendir ftp user password host name files
  • 在哪里可以获得 PHP 5.3+ 的 runkit DLL 扩展?

    这是一个简单的问题 我在哪里可以获得 PHP 5 3 版本的 runkit 扩展 它的手册 http php net manual en book runkit php http php net manual en book runkit
  • docker 中的 php Curl 冲突 CURLOPT_FILE 和 CURLOPT_RETURNTRANSFER

    当我使用curl时CURLOPT FILE and CURLOPT RETURNTRANSFER选项 文件为空 没有任何curl错误 fp fopen saveTo w ch curl init fileUrl curl setopt ch
  • 是否可以用 PHP 编写电子邮件解析器? [关闭]

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

    安装 Zend Framework 就是这么简单 是的 对 好吧 我正在写一本初学者的书 有一件不太详细的事情是最重要的部分 安装该死的东西 浏览了几个小时的快速入门指南后 它只说 下载 Zend 添加包含目录 bla bla 然后就完成了
  • 如何从shell脚本自动登录MySQL?

    我有一个 MySQL 服务器 其中有一个用户和密码 我想在 shell 脚本中执行一些 SQL 查询而不指定密码 如下所示 config sh MYSQL ROOT root MYSQL PASS password mysql sh sou
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • CodeIgniter:My_Lang 中的 get_instance

    我发现这个有用的国际化代码 http pastebin com SyKmPYTX http pastebin com SyKmPYTX 一切正常 除了我无法在此类中使用 CI 函数 我想从 DB 设置 languages 和 special
  • 映射 mysql 中同一个表的多个值

    您好 我必须使用另一个表中的值 id 获取文本值 表 1 包含值 ID 表 2 包含名称和值 ID 表 1 SEVERITY OCCURENCE DETECTABILITY 2 3 4 表 2 id name value 1 Very Hi
  • 从 Laravel 4 输入生成新数组

    我使用 Input all 从动态生成的表单中获取一些输入 我使用 jQuery 来允许用户添加字段 字段名称为 first names last names 和 emails input 变量现在看起来像这样 array size 4 t
  • 如何处理 REST api 中的 php 通知、警告和错误?

    在 REST API 中 200 响应表明操作成功 PHP 默认情况下直接在响应正文中输出错误消息 而不更改响应代码 在 SPA 中 用户无法直接看到响应文本 因此 当应用程序未按预期工作时 我通过 FireBug 检查响应正文 以检查可能
  • 使用PHP从doc、xls文件中读取数据

    我想知道是否可以从 doc 和 xls 文件中读取数据并将 将内容读取到图像文件中 创建文档的页面样本 例如 我有一些文件希望我的客户购买 所以我需要自动创建小图像 例如我的文档样本 我们将不胜感激您的帮助 对于读取 xls 文件 我真的推
  • SQL不允许表中有重复记录

    如何使其不添加重复项 我想让它通过 ID 之外的所有其他列进行检查 我希望这个无效 ID col1 col2 col3 1 first middle last ID col1 col2 col3 2 first middle last 我希
  • 如何从实体内部获取Web目录路径?

    我研究了如何用 Doctrine 处理文件上传 http symfony com doc current cookbook doctrine file uploads html我不想硬编码 DIR web this gt getUpload
  • PHP 中的 -> 和 :: 有什么区别?

    这个东西困扰我好久了 一直找不到 在 php 中使用 和 gt 之间的类有什么区别 让我举个例子 想象一个名为 MyClass 的类 该类中有一个函数 myFunction 使用有什么区别 MyClass myclass new MyCla
  • 使用 php/regex 验证美国电话号码

    EDIT 我混合并修改了下面给出的两个答案 以形成完整的功能 现在它可以完成我想要的功能 然后是一些 所以我想我会将其发布在这里 以防其他人来寻找同样的东西 Function to analyze string against many p
  • 在本地 SDK 服务器上工作时,实时 Google App Engine 上出现 404

    我已经在GAE标准环境上部署了几个PHP应用程序 一切正常 现在我正在部署一个新应用程序 该应用程序位于由gcloudSDK按预期工作 终端命令 dev appserver py log level warning app yaml 问题是
  • 矩形超出边界是什么意思

    PPB Graphics2D PaintImageData 矩形超出界限是什么意思 我几乎在我检查的每一段代码中都看到了它 最新的代码是 define my consumer key define my consumer secret oa

随机推荐

  • 方法控制器不存在。

    所以我又使用了这个格式 在我的routes php中我有 Route controller datatables HomeController PaymentsData gt payments data getIndex gt datata
  • 使用 jQuery 查找文本字符串?

    假设某个网页有一个字符串 例如我想查找 我是一个简单的字符串 我将如何使用 JQuery 来解决这个问题 jQuery 有 contains 方法 这是给您的一个片段 上面的选择器选择包含目标字符串的任何元素 Foundin 将是一个包含任
  • ASP.NET MVC Razor 渲染额外空白

    在 Asp net MVC 中 Razor 在文本块之间插入额外的空格 我想以这种方式呈现一个列表 1 2 3 但得到 1 2 3 for int i 1 i lt 3 i
  • 替换字符串中的多个字符 (XSLT)

    我需要能够替换某些字符 以便我可以将它们用作 CSS 类 我有诸如类 名称 类名之类的字符串 这些字符串不是有效的 CSS 类 据我所知 如何使用替换功能来替换多个字符 E g translate className would repla
  • 如何在谷歌同意屏幕中添加徽标?

    我已经在谷歌开发者控制台中创建了项目 现在我想在同意屏幕中设置我的徽标 我的计算机上有徽标 同意屏幕上的徽标字段需要 URL 有什么方法可以在我的计算机上的同意屏幕上设置徽标吗 我还尝试在谷歌驱动器上上传图像并将其共享链接放在徽标字段中 您
  • 使用 dom4j DOMDocument 提供 validator.validate(DOMSource) 在 java 1.6 中失败(不允许 xsi:noNamespaceSchemaLocation),在 1.5 中有效

    使用 dom4j DOMDocument 提供 validator validate DOMSource 在 java 1 6 中失败 不允许 xsi noNamespaceSchemaLocation 出现在根元素中 在 1 5 中有效
  • “驱动程序未定义”Python/Selenium

    我想在 Python 上使用 Selenium 但有一条警告消息 driver webdriver Chrome D Selenium Chrome chromedriver exe NameError 名称 driver 未定义 我已经安
  • 更改 Hibernate 继承中的子类型

    我想在 Play Framework 中使用 Hibernate 建模三个类 Entity Inheritance strategy InheritanceType JOINED public class SupplyArea extend
  • 使用 TSQL 解压缩值

    如何解压缩存储过程中的 varbinary max 值 我想在 TSQL 代码中实现或调用gunzip 算法 最好不启用 CLR 调查 sp OACreatehttp msdn microsoft com en us library ms1
  • React 无法读取未定义的属性映射

    我对反应很陌生 我正在尝试从 Rails api 引入数据 但我收到了错误TypeError Cannot read property map of undefined 如果我使用反应开发工具 我可以看到状态 如果我在控制台中使用它 我可以
  • MVC 1 和 IIS 7 错误代码 4011

    我有一个在 IIS 7 5 上运行的 MVC 1 应用程序 一些操作完成后 我得到了一个使用 System Web Routing RouteValueDictionary 作为第二个参数的 RedirectToRoute 调用 基本上 它
  • 从数据帧中分层随机抽样

    我有一个格式为的数据框 head subset ants 0 1 1 0 1 age 1 2 2 1 3 lc 1 1 0 1 0 我需要根据年龄和 lc 创建带有随机样本的新数据框 例如 我想要来自age 1和lc 1的30个样本 来自a
  • Python2 和 Python3 使用带有查找和索引的映射时的区别

    给定一个模式和一个字符串str 求如果str遵循相同的模式 这里的 follow 表示完全匹配 这样在pattern中的字母和pattern中的非空单词之间存在双射str 例子 pattern abba str dog cat cat do
  • React-Redux 应用程序中的 OpenID Connect SSO

    我正在尝试使用 OpenID Connect 提供程序在我的 React Redux 应用程序上实现 SSO 目的是保护所有组件 并在会话结束时将用户重定向到身份提供者的登录页面 这就是为什么我不能在应用程序中拥有专用的登录页面 组件 我读
  • 使用平均值填充 pandas 数据框中的缺失值

    datetime 2012 01 01 125 5010 2012 01 02 NaN 2012 01 03 125 5010 2013 01 04 NaN 2013 01 05 125 5010 2013 02 28 125 5010 2
  • 蓝牙串行插件不适用于 ionic

    我正在尝试将蓝牙集成到我的离子应用程序中 以便它可以从蓝牙设备接收数据 我尝试使用蓝牙插件 但在 PC 和 Android 设备上都出现了一堆错误 我已经使用以下命令安装了蓝牙串行 cordova 插件添加 com megster cord
  • typedef 如何用于函数指针

    我想我可能患有可怕的 意外程序员 病 至少在 typedef 和函数指针方面是这样 因此 我一直在尝试涉及这些的各种组合 以根据我得到的所有输出来分析结果 但当我不断尝试不同的组合时 我现在没有分析结果 而是迷失在过程中 我希望你们能帮我解
  • 如何 clickElement() 并在同一选项卡中打开链接,而不是在新窗口中?

    我的网页中有以下 html 元素 a target self href View Data Set a 我在 Rselenium 中使用以下命令来查找该标签 webElem lt remDr findElement using xpath
  • 禁用 Thread.sleep()

    我想禁用在 java 项目中使用 Thread sleep 的可能性 并使用我自己的方法 sleep int time String info 这将等待给定的时间 并打印信息为什么需要在这里等待 正在禁用Thread sleep 可能的 如
  • QueryBuilder/Doctrine 选择加入 groupby

    所以最近我一直在思考 但还找不到这个问题的解决方案 因为我缺乏对doctrine2和symfony查询生成器的开发 我有 2 张桌子 目标 id user id target value 储蓄 id goal id 金额 我需要从目标中进行