Doctrine 2多个选择元素,别名,date_format

时间:2017-04-12 12:21:33

标签: php mysql symfony doctrine-orm doctrine

我是学说的新手,想要使用它对我的数据库进行查询

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)?

谢谢

2 个答案:

答案 0 :(得分: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

您也可以尝试DQL(http://symfony.com/doc/current/doctrine.htmlhttp://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html)代替QueryBuilder:

$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();

答案 1 :(得分:1)

您可以安装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