Another day at the office / HikingArtist.com
ちわー! FuelPHP 使ってますか?本日は Orm のお話です。
Orm (Object Relational Mapper) をまだ理解していないけど、せっかくだから使ってみよう!と試みているのですが、純粋に BETWEEN する時にどうするんだろう?
てなわけで Documentation に記載されていないのでメモ。
サンプルアプリの用意
コチラのサイト手順で作成される blog アプリを流用です。
- 検索対象はレコード生成時間 (created_at) を BETWEEN で比較します。
- もくろみとしては、where 句引数に SQL 生クエリをセットするのかな、と単純な発想。
実践!!
<?php $date = date('Ymd'); $query = User::find() ->where('created_at', 'between', \DB::expr($date.'000000'.' and '.$date.'235959')) ->get(); |
生成される SQL クエリ
SELECT COUNT(DISTINCT `t0`.`id`) AS count_result FROM `posts` AS `t0` WHERE `t0`.`created_at` BETWEEN 20120522000000 AND 20120522235959 |
\DB::expr しているので当然 BWETEEN 部分はエスケープなし。
クエリとしては成立しているのだけれど、もっとうまいこと出来ないものかな?
と、なんとなく kohanaのやり方を真似してみました。
<?php $date = date('Ymd'); $query = User::find() ->where('created_at', 'between', array($date.'000000', $date.'235959')) ->get(); |
生成される SQLクエリ
SELECT COUNT(DISTINCT `t0`.`id`) AS count_result FROM `posts` AS `t0` WHERE `t0`.`created_at` BETWEEN '20120522000000' AND '20120522235959' |
となりました。
いじょう、メモ。
