リレーション先のカラムデータに基づいて・・したい | Laravel

Laravel

予約情報を入れている reservationsテーブルとリレーションさせている schedulesテーブル(受付可能枠データ)があり、ログインユーザー自身の予約情報を取得しつつ、スケジュールの近い順にソートしたい。
という場合。

ReservationとScheduleは1対1のリレーションを貼っています。

リレーション先のカラムに基づいて並べ替え

//(自分の)予約情報と予約枠情報取得
$my_reservations = Reservation::where('user_id', Auth::id())
->with('schedule')->get();
//スケジュールが近い順に並べ替え
$my_reservations = $my_reservations->sortBy('schedule.available');

リレーション先のカラム情報から指定範囲を抽出

もうひとつ、自分が過去に予約したレッスン日時を元にデータを抽出したいとき。

$today = strtotime("today");

//自分の予約をscheduleテーブル情報と一緒に取得
$reservations = Reservation::where('user_id', Auth::id())->with('schedule')->get();

//scheduleテーブルのavailableカラム情報が$todayより小さいものを絞り込む
$reservations_old = $reservations->where('schedule.available', '>' ,$today);

これでいけました!

参考サイト様

laravel eloquent withでソートしたい時

余談
私がまだlaravelを触り出して日が浅いからなのですが、最後のwhereってget()使ってないんですよね・・・むしろget()をつけたらエラーになってしまって・・・

get()いるときといらない時、何が違うんでしょう。精進しなければ・・・

タイトルとURLをコピーしました