webcode-labサイトロゴ

  • お問い合わせへのリンクバナー

Webcode Laboratory
for website coding & program & seo;

Topics

この Blog CMS について
Symfony2【Doctrine DQL関数拡張】MySQL(PostGreSQL)のNOW,ROUND,FLOOR,GROUP_CONCAT等の関数を使用(EC-CUBE3) eyecatch画像

Symfony2【Doctrine DQL関数拡張】MySQL(PostGreSQL)のNOW,ROUND,FLOOR,GROUP_CONCAT等の関数を使用(EC-CUBE3)

rss
symfony logo
doctrine logoEC-CUBE logo
※EC-CUBEは株式会社ロックオンの商標です
 

Symfony2【Doctrine DQL関数拡張】MySQL(またはPostGreSQL)のNOW,ROUND,FLOOR,GROUP_CONCAT,REPLACE等の関数を使用する

Symfony2 Doctrine のデフォルトで入っていない、MySQLの関数をDQLで使うためには、
DQLのカスタム関数として拡張する必要があります。

例えば、 NOW  ROUND , FLOOR , GROUP_CONCAT , REPLACE 等のMySQL関数を使用したい場合、
DQL関数の拡張をしてやれば使用できるようになります。
下記リンク先に拡張関数が公開されていて、いつもとても役立つので投稿しておきます。
(EC-CUBE3で説明していますが、他でも同様に拡張できます。)

DQL拡張用 MySQL関数

 

 



EC-CUBE3で Symfony2 Doctrine DQL拡張方法(MySQL関数)

※EC-CUBE3で説明していますが、他でも同様に拡張できます。

拡張ファイルDL&設置

上記リンク先(DQL拡張用 MySQL関数)より、使用したい関数の必要ファイルをダウンロードして、
ECCUBE内の好きな場所に「DoctrineExtensions/Query/Mysql」等、
好きなディレクトリ階層を作り、そのディレクトリ内にファイルを設置します。
(src/ECCUBE/Doctrine/DoctrineExtensions/Query/Mysql などどこでも)

拡張ファイルの「namespace」を変更

①でダウンロードし設置した拡張ファイルを開き、拡張ファイル自体の「namespace」を、置いたディレクトリ階層に変更(書き換え)し保存します。
例)src/ECCUBE/Doctrine/DoctrineExtensions/Query/Mysqlディレクトリに置いた場合

namespace Eccube\Doctrine\DoctrineExtensions\Query\Mysql;

拡張関数を使用するControllerやEventファイル内の使用箇所で拡張設定
// DQL関数拡張 (例:GROUP_CONCAT関数・REPLACE関数)
$config = $app['orm.em']->getConfiguration();
// 例:GROUP_CONCAT関数
$config->addCustomStringFunction('GROUP_CONCAT', 'Eccube\Doctrine\DoctrineExtensions\Query\Mysql\GroupConcat');
// 例:REPLACE関数
$config->addCustomStringFunction('REPLACE', 'Eccube\Doctrine\DoctrineExtensions\Query\Mysql\Replace');

  このようにすれば、拡張記述した以降のQueryBuilderで、
 DQL文の中にMySQL関数の、
GROUP_CONCAT  REPLACE  が使えるようになります。



 

公開されているDQL拡張用関数一覧

DQL拡張用 MySQL関数の一覧

主要な関数しか動作確認していませんが、使用した主要関数は正常に使えました!

DQL拡張用 MySQL関数


Acos
AesDecrypt
AesEncrypt
AnyValue
Ascii
Asin
Atan
Atan2
Binary
BitCount
BitXor
Ceil
CharLength
Collate
ConcatWs
ConvertTz
Cos
Cot
CountIf
Crc32
Date
DateAdd
DateDiff
DateFormat
DateSub
Day
DayName
DayOfWeek
DayOfYear
Degrees
Div
Exp
Extract
Field
FindInSet
Floor
FromUnixtime
Greatest
GroupConcat
Hex
Hour
IfElse
IfNull
LastDay
Least
Log
Log10
Log2
Lpad
MatchAgainst
Md5
Minute
Month
MonthName
Now
NullIf
Pi
Power
Quarter
Radians
Rand
Regexp
Replace
Round
Rpad
SecToTime
Second
Sha1
Sha2
Sin
Soundex
Std
StdDev
StrToDate
SubstringIndex
Tan
Time
TimeDiff
TimeToSec
TimestampAdd
TimestampDiff
Unhex
UnixTimestamp
UtcTimestamp
UuidShort
Variance
Week
WeekDay
Year
YearMonth
YearWeek

 

DQL拡張用 PostGreSQL関数の一覧

PostGreSQL関数もMySQL関数と同様に、DQL関数拡張が行えます。

DQL拡張用 PostGreSQL関数

TO_DATE
TO_CHAR
AT_TIME_ZONE
COUNT_FILTER
STRING_AGG


 

(別で公開されている)DQL拡張用 MySQL & PostGreSQL関数の一覧

別で公開されている、下記リンク先も役立ちます。
PostGreSQLでよく使う CAST はこちらにあります。

DQL拡張用 MySQL & PostGreSQL関数

Doctrine 設定方法

CAST
CONCAT_WS
CONVERT_TZ
DAY
DATE
DATE_FORMAT
DAYOFWEEK
DAYOFMONTH
DAYOFYEAR
GROUP_CONCAT
HOUR
MD5
MINUTE
MONTH
POW
QUARTER
REPLACE
ROUND
SECOND
SIGN
TIME
TIMESTAMP
TIMESTAMPDIFF
WEEK
YEAR

 

ちなみに、主要関数のみでの動作確認ですが、
PostGreSQL関数でなくとも、MySQL関数をDQL拡張し導入すれば、PostGreSQLでも正常に動作するようで、
DQL拡張がどのような設計になっているのか掴めていないところです。。。


 


ページの先頭へ

rss
1件目 (1件中)