予約情報を入れている 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を触り出して日が浅いからなのですが、最後のwhereってget()使ってないんですよね・・・むしろget()をつけたらエラーになってしまって・・・
get()いるときといらない時、何が違うんでしょう。精進しなければ・・・

