11
10

More than 5 years have passed since last update.

【Laravel5.7】カラム名でBETWEENしたい

Posted at

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が発行されてるし、結果も正しいけど、なんというかこれでいいのか?

11
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
10