SELECT * FROM table WHERE id BETWEEN 1 AND 10
と書きたい場合は普通に書けます。
$response = Table::whereBetween('id', [1, 10])->get();
こうすると `id` BETWEEN ? AND ?
というSQLが発行され、正しく想定通りの結果を得られます。
ところで、たとえば表示開始時刻から表示終了時刻までは表示する、といった仕組みを作りたい場合はどうすればいいか。
つまりSELECT * FROM table WHERE NOW() BETWEEN display_start AND display_end
ということです。
これを調べてみたのだけど、意外と見当たらなかった。
$response = Table::whereBetween('NOW()', ['display_start', 'display_end'])->get();
こう書くと、 `NOW()` BETWEEN ? AND ?
とかいうSQLが発行されてしまいます。
当然NOW()
なんてカラムは無いのでエラーです。
仕方ないので試しにやってみたらこれで動いた。
$response = Table::whereBetween(DB::raw('NOW()'), [DB::raw('display_start'), DB::raw('display_end')])->get();
いや、うん、想定通りのSQLが発行されてるし、結果も正しいけど、なんというかこれでいいのか?