こんにちは。
DBから去年のデータを抽出したいと思い、以下のSQLを記述しました。
$last_year = '2020'; $hoge_log_data = HogeLog::with(['piyo', 'fuga']) ->orderBy('id', 'DESC') ->whereIn('id', $user_id) ->where('toc', 'like', '%' . $last_year . '%') ->get();
テーブルにはtocという名前のカラムが存在しており、中には「2014-08-03 01:33:11.284905」というデータが入っています。
WEBで調べたところ、whereで先述のように引数を渡せば検索できると出てきたのですが、結果は2021年のデータが取得されています。
どのようにすれば去年のデータが取得できますでしょうか?
ご指摘、よろしくお願い致します。
$last_yearの値はなんですか?
$hoge_log_dataの前に\DB::enableQueryLog();
->get();の後にdd(\DB::getQueryLog());
でSQLが見えます。
作り上げたSQLが正しいか確認をお願いします。
skys215さん
いつもありがとうございます。
$last_yearの値は2020です。
作り上げたSQLを実行したところ以下のように出てきました。
なぜこんなクエリになっているのか理解できません。。。
array:3 [▼
0 => array:3 [▼
"query" => "select * from "hoge_log" where "toc"::text LIKE ? and "id" in (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) order by "id" desc limit 25 ◀"
"bindings" => array:260 [▶]
"time" => 1532.12
]
1 => array:3 [▼
"query" => "select * from "piyo" where "piyo"."id" in (11)"
"bindings" => []
"time" => 493.65
]
2 => array:3 [▼
"query" => "select * from "fuga" where "fuga"."id" in (10, 10, 22, 84, 06, 34, 50, 31)"
"bindings" => []
"time" => 496.91
]
]
2020-09-23 17:04:11.62011
この場合は頭の2020に引っかかって
2021-09-23 17:04:11.20201
この場合は後ろの文字列に引っかかっていましたので
->where('toc', 'like', '%' . $last_year)
このように変更しました。
例えば
$this_month='2020-09'
として年月とした場合は、引っかからないのですが、ハイフンなどは入れることが出来ないのでしょうか?
それとも正規表現などを使用しないといけないのでしょうか?
MYas30さんの書き方(後ろに%をつける)で解決することができました。
いつもお力添えを頂き、ありがとうございます。
またよろしくお願い致しますm(_ _)m
回答1件
あなたの回答
tips
プレビュー