【问题标题】:SQL Request to Doctrine 2 QueryBuilder对 Doctrine 2 QueryBuilder 的 SQL 请求
【发布时间】:2017-04-12 14:12:28
【问题描述】:

我是 symfony 和 Doctrine 2 的新手

我做了一个 SQL 查询

SELECT DATE_FORMAT(DATE(history.played_at), '%m-%Y') AS 'date' , 
       COUNT(DISTINCT(l.id)) AS 'value'
FROM listeners AS l LEFT JOIN history ON history.listener_id = l.id
WHERE history.played_at IS NOT NULL
GROUP BY YEAR(DATE(history.played_at)), WEEK(DATE(history.played_at))

我想在我的 symfony 项目中使用 Doctrine 2 和 QueryBuilder,但我不知道怎么做

我现在有这个

$qb->select($qb->expr()->countDistinct('l.id'))
       ->from('AppBundle:Listener', 'l')
       ->leftJoin('AppBundle:History', 'h', 'l.id = h.listener')
       ->where($qb->expr()->isNotNull('h.played_at'));

但它根本不起作用,很多东西都不见了

如果有人能清楚地告诉我该怎么做,那就太好了

【问题讨论】:

  • 您可能必须在此处使用原始查询。
  • @TimBiegeleisen 是的,这就是我想要的,但我们很快可能会继续使用 PostGreSQL,然后我需要使用 QueryBuilder 来实现
  • @TimBiegeleisen 如果没有其他方法可以做到这一点,我将使用原始查询,但如果可以使用 Doctrine 的 Query Builder 进行操作,我想使用它。问题是我不知道该怎么做
  • 首先修复您的查询。您应该按DATE_FORMAT 表达式进行分组,与您选择的相同。
  • @TimBiegeleisen 查询有效

标签: php sql symfony doctrine-orm doctrine


【解决方案1】:

我不是 SQL 专家,但这个查询应该可以工作:

        $qb = $this->em->createQueryBuilder()
        ->select('COUNT(DISTINCT l.id)')
        ->from('AppBundle:Listener', 'l')
        ->leftJoin('AppBundle:History', 'h')
        ->where('h.playet_at IS NOT null');

如果您想更进一步,我建议您查看 Doctrine Query Builder 文档 http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/query-builder.html

希望对你有帮助

编辑 : WEEKS 在 Doctrine 中不是原生的,但您可以将它与 https://github.com/beberlei/DoctrineExtensions 一起使用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 2017-12-17
    • 1970-01-01
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    • 2013-12-31
    相关资源
    最近更新 更多