Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

rana_kualu
不労所得で生きたい。
https://twitter.com/rana_kualu
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away