DQLで日付関数とGROUP BY
DQLでDATEカラムをGROUP BYする方法がわからなかったので調べた
DoctrineExtensionを入れる
https://github.com/beberlei/DoctrineExtensions
でSQLの関数を追加
composer require beberlei/doctrineextensions
configs/packages/doctrine.yaml
に追加
doctrine:
orm:
dql:
string_functions:
MONTH: DoctrineExtensions\Query\Mysql\Month
YEAR: DoctrineExtensions\Query\Mysql\Year
DATE_FORMAT: DoctrineExtensions\Query\Mysql\DateFormat
QueryBuilder
例えばNewsPost
エンティティで記事がある年を取得する
NewsPostRepository
$qb = $this->createQueryBuilder('post')
->select('YEAR(post.post_date) AS year')
->groupBy('year')
->orderBy('post.post_date', 'DESC')
;
// array(
// array(
// 'year' => 2022
// ),
// array(
// 'year' => 2021
// )
// )
Group By 節に直接日付関数は使えない模様
$qb->groupBy('YEAR(post.post_date)');
$qb->groupBy('YEAR(post.post_date)');
とした時
[Semantical Error] line 0, col 59 near 'YEAR(post.post_date)': Error: Cannot group by undefined identification or result variable.
というエラーが出る。
select()で明示的に取得カラムにエイリアスをつけて、エイリアスでGroupByする様だ。
Author And Source
この問題について(DQLで日付関数とGROUP BY), 我々は、より多くの情報をここで見つけました https://qiita.com/solexbeer/items/14a2f485f92ad0e32a78著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .