見出し画像

CakePHP3で年齢検索したいんだけど

って質問されたわけです。

えーっとですね。別に難しいことではないと思うんですがね・・・。


まぁ、クエーリービルダー使ってやりたい、ってことでどうやってやればいいのかね、と。


これねぇ。
CakePHPだと思うから変なこと考えちゃうのかも。


結局は、MySQL(MariaDB?)を使ってるんだったら、
そっちのお作法にあわせなきゃ。


ってことで、
CakePHP3+MySQLでの年齢検索の方法です。


DBとしては、
usersテーブルに、birthdayっていうdateのカラムがあるとします。

CREATE TABLE `users` (
 `user_id` MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,
 `birthday` DATE NOT NULL COMMENT '生年月日',
 PRIMARY KEY (`user_id`)
) ENGINE=INNODB EFAULT CHARSET=utf8;

24歳以上を検索したければ、まずは普通に、SQL書いたとしたらどんなSQLになるか、なんですが。

select * from users where timestampdiff(YEAR,birthday,now())> 24);

とか書けるわけ。

なので、
それをそのままクエーリービルダーでも書いてやればいいんですよね。

こんな感じ?

$query = $this->Users->find()
              ->where(['TIMESTAMPDIFF(YEAR, birthday, now()) > ' => 24]);

はい、簡単ですね。


この記事が気に入ったらサポートをしてみませんか?