2017-09-28 6 views
0

ユーザーと予約を持つアプリケーションのレポートを作成しています。Laravelは、リレーションシップの最後のアイテムが要件と等しいレコードのみを返します。

目的は、過去2ヶ月以内に予約を行っていないすべてのユーザーを返すことです。

私のクエリでは、指定されたチームで予約を行ったすべてのユーザーが返され、最も古いものから最も古いものまで予約が注文されます。

私の質問は、最終予約が2か月以上前の予定予約時間を持つユーザーのみを返すことができますか?

私の現在のクエリは次のとおりです。

$collection = User::whereHas('customerBookings', function($q) use ($teamId) { 
    $q->where('team_id', $teamId); 
})->with(['customerBookings' => function ($q) use ($teamId) { 
    $q->where('team_id', $teamId); 
    $q->orderBy('estimated_booking_time', 'desc'); 
}]) 
->get(); 

これは正しく要求TEAM_IDを持っているし、その後、同じ要件に合致予約を返すの予約(予約テーブルとの関係)を持つすべてのユーザーを返します。

私はコレクションで - > rejectを使用しようとしていましたが、私はむしろクエリ自体をフィルタリングします。

理想的には私がサンタクロースとに何かを追加したい:

$q->where(FIRST RELATIONSHIP ITEM ->estimated_booking_time, '<=', Carbon::now()->subMonths(2)); 

私にとっての問題は、私が関係から最初の項目を取得し、唯一この最後の項目に応じて、ユーザーを返すためにそれを使用することができる方法です。

+0

私はあなたが何をする必要があるかを理解トラブルを抱えています。 2か月以上経っている場合にのみ 'customerBookings'を取得する必要がありますか? – apokryfos

答えて

0

where()に最後に予約した時間(たとえば2か月前)から時間nowを差し引くだけで済みます。 look at this referenceもあります。私はこれがあなたと似ていると思います。

0

おそらくあなたは、UserモデルとBookingモデルの間に多少の関係があります。 ユーザモデルには、予約モデルに関連する「予約」()メソッドがあります。

は、あなたがすることができる、と述べた:

$users = \App\User::whereHas('bookings', function ($query) { 
    $query->where('lestimated_booking_time', '<=', Carbon::now()->subMonths(2)); 
}); 
関連する問題