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 的相关文章

  • 打印一个模式以显示最多 5 行 5 列的数字,例如 5 4 3 2 1 和下一行 4 3 2 1 5 直到第 5 行

    这是一个正方形图案 每行有 5 列 共有 5 行 图案如下所示 5 4 3 2 1 4 3 2 1 5 3 2 1 5 4 2 1 5 4 3 1 5 4 3 2 我的代码如下以获得模式 但当计数器达到 1 并显示在相应的列值中时 我无法重
  • 如何使用 RewriteRule 来为 PHP 修改 $_SERVER['REQUEST_URI'] ?

    有了这个 htaccess RewriteEngine On RewriteRule foo foo 1 here I tried L PT C etc RewriteRule index php L 我已经尝试了第一个 RewriteRu
  • 复杂的sql树行

    表结构 id message reply id 1 help me 0 434 love to 1 852 didn t work 434 0110 try this 852 2200 this wont 0 5465 done 0110
  • PHP 从日志事件中获取行号

    好的 我还有一个问题HERE https stackoverflow com questions 3213423 php how could i make this class better suggestions feedback wel
  • php exec 返回的结果比直接进入命令行要少

    我有一个 exec 命令 它的行为与通过 Penguinet 给 linux 的相同命令不同 res exec cd mnt mydirectory zcat log file gz echo res 当将命令直接放入命令行时 我在日志文件
  • 正确的标头 php mysql blob 显示图像

    我正在尝试在我的 PHP 页面中显示来自 mysql blob 的图像 我知道这不是最佳实践 然后我会将其引入我的 iOS 应用程序中 我在设置页面标题时遇到问题 我认为需要将其设置为图像 所以 这显示了图像 但我不相信页眉是正确的 hea
  • PHP 中的抽象类是什么?

    PHP 中的抽象类是什么 如何使用 抽象类是至少包含一个抽象方法的类 该方法中没有任何实际代码 只有名称和参数 并且已被标记为 抽象 这样做的目的是提供一种模板来继承并强制继承类实现抽象方法 因此 抽象类是介于常规类和纯接口之间的东西 此外
  • 使用php插入sql数据库时出错

    我有一个带有 MySQL 插入查询的程序 sql INSERT INTO people person id name username password email salt VALUES person id name username p
  • PHP别名@函数

    我是 PHP 新手 看到一些使用 前缀调用函数 如 mysql ping 的示例 我感到很困惑 它是做什么用的 谷歌搜索 搜索没有太大帮助 因为 被丢弃并且 别名 不是足够好的关键字 抑制错误 警告和通知 如果你用自定义的方式补充它 你可以
  • 如何使用php在mysql数据库中添加照片? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我对 PH
  • Laravel 类邮件程序不存在

    我将应用程序从 5 更新到 5 2 现在 当我调用 Mail send 时 它会返回一个异常 Class mailer 不存在 Mail send emails mail data gt content function m use to
  • PHP函数返回值到html标签

    我想获取函数的返回值并将其显示到特定的id 在我的 Class php 中 我有一个名为 login 的函数 用于验证密码是否正确 不正确
  • 在 PHP 中使用数组来比较用户名/密码

    我有以下 php 脚本 其中有一个用户名和密码 Username user1 Password pass1 if isset POST submitform Clean up the input values foreach POST as
  • 我应该使用排队系统来处理付款吗?

    我在用着Slim https www slimframework com和这个结合Stripe 的 PHP 库 https stripe com docs api php在我的应用程序中处理付款 一切都很好 但是直到最近 我在我的系统中发现
  • PHP 相当于朋友或内部

    php 中是否有相当于 朋友 或 内部 的东西 如果没有 是否有任何模式可以遵循来实现这种行为 Edit 抱歉 但标准 Php 不是我想要的 我正在寻找类似于马戏团长所做的事情 我有一些类在后端进行 C 风格的系统调用 并且杂耍已经开始变得
  • PHP 中的坏词过滤器?

    我正在用 PHP 编写一个坏词过滤器 我在数组中有一个坏词列表 方法 clean text 的写法如下 public static function cleanse text originalstring if self is sorted
  • MySQL 正在将我的时间戳值转换为 0000-00-00

    我是 PHP 新手 目前仍在学习中 我认为我的注册表有问题 username password email全部成功插入MySQL registered and last seen不要 我以为我正在使用getTimestamp 错了 但它呼应
  • 使用“AND”表达式构建动态 SQL,而不混淆嵌套条件?

    总的来说 我对 php 和编码相当陌生 我有一系列条件需要测试它们是否已设置 它们是 option1 option2 option3 if isset option1 if isset option2 if isset option3 qu
  • 在 Django 查询中使用 .extra(select={...}) 引入的值上使用 .aggregate() ?

    我正在尝试计算玩家每周玩游戏的次数 如下所示 player game objects extra select week WEEK games game date aggregate count Count week 但姜戈抱怨说 Fiel
  • MYSQL 按喜欢/不喜欢和受欢迎程度排序

    我有评论表 其中包括喜欢和不喜欢的内容 现在我在正确的顺序上遇到了问题 实际上 我的系统在顶部显示了最多点赞的评论 我正在 youtube 上寻找类似系统的东西 这意味着 100like 100dislikes 的评论的顺序高于 1 1 我

随机推荐

  • 方法控制器不存在。

    所以我又使用了这个格式 在我的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 金额 我需要从目标中进行