我是学说的新手,想要使用它对我的数据库进行查询
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)?
谢谢
答案 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.html和http://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