こんにちは。ソウタです。
特定のデータの取得の仕方についてメモも兼ねて、アウトプットしていきたいと思います。
Laravelで料理注文アプリを作っていたので、アプリのコードを元に説明していきたいと思います!
まず、ユーザーが料理を注文し、注文を受けたレストランが「今日の注文履歴」をみたいので、それをフロントに表示させたい過程にいると仮定します。(ユーザーが注文する所は省略)
php.RestaurantController.php
use Carbon\Carbon;
Carbonを使うので、use宣言をコントローラに書く。
RestaurantController.php
public function RestaurantAccount()
{
$restaurantId = Auth::user()->id;
// クエリ(SQL)を変数へ一旦入れておくとコードがスッキリする。
$query = Restaurant::find($restaurantId)->orders();
// ログインしているレストランに紐づく注文を全件取得
$orders = $query->get();
// デバックで注文がちゃんと取得できているか確認。
// dd($orders);
// レストランに紐づく注文のうち、今日の注文のみ取得
$today_orders = $query->where('created_at', Carbon::today())->get();
// デバックで注文がちゃんと取得できているか確認。
// dd($today_orders);
return view('restaurant.restaurant_account', ['orders' => $orders, 'today_orders' => $today_orders]);
}
コードは書いてみたのの、データがとれていない。あらら。
色々とググり。判明。
以下のサイトを参考にしてみました。
https://biz.addisteria.com/laravel_carbon/
まず、日本時間でデータを取得しないといけないので、、、、timezoneをconfig.app.phpで変更。
デフォルトでUSで設定されている。
config/app.php
// これを消す
'timezone' => 'US',
// 追加
'timezone' => 'Asia/Tokyo',
どうやら、whereではなく、whereDateにしないといけないらしい。
RestaurantController.php
$today_orders = $query->whereDate('created_at', Carbon::today())->get();
修正し、デバック。
"created_at" => "2022-01-02 20:17:29"
"updated_at" => "2022-01-02 20:17:29"
具体的な注文情報は、割愛しますが、しっかり取得できていました。よかった。。。。
新年も頑張っていきたいと思います。
よかったと思ったら、LGTMボタンを押してください!!やる気が出るんです!!笑