Doctrine 2 多个选择元素、别名、日期格式

Posted

技术标签:

【中文标题】Doctrine 2 多个选择元素、别名、日期格式【英文标题】:Doctrine 2 Multiple select elements, aliases, date_format 【发布时间】:2017-04-12 12:21:33 【问题描述】:

我是学说新手,想用它在我的数据库上进行查询

SELECT DATE_FORMAT(DATE(created_at), '%m-%Y') AS 'date', 
       COUNT(DISTINCT(id)) AS 'value'
FROM users
GROUP BY YEAR(DATE(created_at)), MONTH(DATE(created_at))

我阅读了一些文档,但仍有一些问题

如何选择多个元素;给我选择的元素起别名,做一个左连接。 WEEK() MONTH() 和 YEAR() 函数可用吗? DATE_FORMAT(来自mysql)是否可用?

谢谢

【问题讨论】:

【参考方案1】:

我认为您应该使用查询生成器 (http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/query-builder.html)。

考虑到日期,您可以使用 symfony datetime 对象并对其进行格式化。 对于左连接,可以使用 leftJoin 方法 (http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/query-builder.html)

<?php
// $qb instanceof QueryBuilder

$qb->select('u as aliasName')      //see for alias
   ->from('User', 'u')
   ->leftJoin('u', 'phonenumbers', 'p', 'u.id = p.user_id')  //see     for left join
   ->where('u.id = ?1')
   ->addwhere(u.date < :date)
   ->orderBy('u.name', 'ASC')
   ->setParameter('date', $symfonyDateTime->format('Y-m-d')); //see for date

除了 QueryBuilder,您还可以尝试 DQL(http://symfony.com/doc/current/doctrine.html 和 http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html):

$em = $this->getDoctrine()->getManager();
$query = $em->createQuery(
    'SELECT p
    FROM AppBundle:Product p
    WHERE p.price > :price
    ORDER BY p.price ASC'
)
->setParameter('price', 19.99);

$products = $query->getResult();

【讨论】:

【参考方案2】:

您可以安装doctrine extensions 以使用以下功能:

DATE, MINUTE, HOUR, DAY, WEEK 等等。

例子:

学说配置

doctrine:
    dbal:
      ....
      orm:
        auto_generate_proxy_classes: "%kernel.debug%"
        entity_managers:
            default:
                dql:
                  datetime_functions: 
                    DATE_FORMAT: DoctrineExtensions\Query\Mysql\DATE_FORMAT

然后你可以很容易地添加这样的别名:

DATE_FORMAT(s.createdAt,'%Y-%m-01') as date

【讨论】:

以上是关于Doctrine 2 多个选择元素、别名、日期格式的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Doctrine ORM 查询中查找与别名相关的表?

将css类上的日期选择器应用于多个输入元素但失败

如何在 pandas 的数据框中选择多个日期列,然后将它们全部格式化? (Python)

避免使用Doctrine DBAL查询构建器select语句将驼峰别名名称转换为小写

Oracle - 从对偶中选择多个别名行

使用多个 SELECT 在 Doctrine CreateQueryBuilder 上获取语法错误