Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

カスタム条件

SQLのWHERE句で関数などを使いたい場合にどう書けばいいのか悩んでましたが、指定した文字列をそのままSQLとして扱うフラグ(comparison)があることに気づきました。

もうそのまんま、「Criteria::CUSTOM」でした。。。
たとえば、

login_date IS NULL OR login_date < date_trunc('day', now())

というWHERE句の場合、こんなコードになります。

<?php
$c = new Criteria();
$criterion = $c->getNewCriterion(self::LOGIN_DATE, null, Criteria::ISNULL);
$criterion->addOr($c->getNewCriterion(self::LOGIN_DATE, "login_date <= date_trunc('day', now())", Criteria::CUSTOM));
$c->addAnd($criterion);

いや、「なんか見たことあるなー」と思ってたんですが、5、6年ほど前にTorqueをベースにして社内向けORMっぽいの(Java/PHP向け)を作っていたことがあって、その時もCUSTOMを用意してたっぽいです。。。すっかり忘れてる。。。