予約情報を入れている 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()いるときといらない時、何が違うんでしょう。精進しなければ・・・