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 查询中查找与别名相关的表?
如何在 pandas 的数据框中选择多个日期列,然后将它们全部格式化? (Python)