Kenji です。
On Sun, 16 Mar 2014 09:54:23 -0700 (PDT)
yuzo urakami <
yuzo.u...@gmail.com> wrote:
> お世話になります。
> 浦上と申します。
>
> 今開発でfuel1.6を使用していて、クエリビルダでand_whereにDB::exprを
> 使用して実行するとエラーになってしまいます。
>
> $query = DB::select('
i.id', 'i.title', 'i.flg_disp',
> array('date_format("i.input_date" , \'%Y/%m/%d\')', 'input_date'))
> ->from(array('informations', 'i'))
> ->where('i.deleted', '=', null)
> ->and_where('i.flg_disp', '<>', 1)
> ->and_where(DB::expr('IFNULL(i.from_date,\'000000000000\')
> <= \''' . date("YmdHi") . '\' and IFNULL(i.to_date , \'999999999999\') <
> \''' . date("YmdHi") . '\'')));
私の環境(1.8/develop)だと、上記は PHP の文法エラーになりました。
$query = DB::select(
'
i.id', 'i.title', 'i.flg_disp',
array('date_format("i.input_date" , \'%Y/%m/%d\')', 'input_date')
)->from(array('informations', 'i'))
->where('i.deleted', '=', null)
->and_where('i.flg_disp', '<>', 1)
->and_where(
DB::expr(
'IFNULL(i.from_date,\'000000000000\') <= \''
. date("YmdHi")
. '\' and IFNULL(i.to_date , \'999999999999\') < \''
. date("YmdHi")
. '\''
)
);
としたら、
SELECT `i`.`id`, `i`.`title`, `i`.`flg_disp`, date_format(`i`.`input_date` , '%Y/%m/%d') AS `input_date` FROM `informations` AS `i` WHERE `i`.`deleted` IS null AND `i`.`flg_disp` <> 1 AND IFNULL(i.from_date,'000000000000') <= '201403170101' and IFNULL(i.to_date , '999999999999') < '201403170101'
でした。
> 上記を実行してプロファイルのand_whereの記述部分のsqlを見てみると
> AND
> IFNULL(`i`.`from_date`,'00000000000000') <= '201403170000'
> and
> IFNULL(`i`.`to_date` , '99999999999999') >= '201403170000' null
> となっており最後にnullが表示されてしまいます。
最後に null が付くというはよくわからないですね。
// Kenji