2017-04-12 28 views
0

我是新教义,并想用它学说2个多重选择元素,别名DATE_FORMAT

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.htmlhttp://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(); 
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