I am trying to get the time \"created_at\" for the last user activity,
I have the model User
, and UserActivity
.
I want to get the last user act
You should eagerload user activities at the same time then with subquery filter based on created_at. Call the latest to get last record and you should be good to go.
$latest_activites = User::with('activites')
->where("activites",function($query){
$query->where("created_at",">=",Carbon::now()->subDays(3));
})->latest()->get();
main structure: model::latest()->get()
$latest_activites = User::with('activites')
->where("activites",function($query){
.
.
.
.
})->latest()->get();
First, create another relationship in User
model, which has to be hasOne to get the latest activity:
public function latestActivity()
{
return $this->hasOne(Activity::class)->latest();
}
Then load just users who have latest activities older than 3 days
$users = User::whereHas('activites', function($q) {
$q->where('created_at', '<=', now()->subDays(3));
})
->whereDoesntHave('activites', function($q) {
$q->where('created_at', '>', now()->subDays(3));
})
->with('latestActivity')
->get();