Здравствуйте.
Стоит задача отфильтровать всех пользователей сайта, по дате создания поста.
Соответственно, на вход принимаем дату, возвращаем только пользователей.
На данный момент у меня получается вот такой лютый говнокод.
Как его лучше всего переписать?
if($request->date) {
$unixDate = strtotime($request->date);
$year = date('Y',$unixDate);
$month = date('m',$unixDate);
$day = date('d',$unixDate);
$posts = DB::table('posts')
->select('user_id')
->whereYear('created_at',$year)
->whereMonth('created_at',$month)
->whereDay('created_at',$day)
->groupBy('user_id')
->get()
->pluck('user_id');
$users = User::find($posts);
return $users;
}
Немного подумал и написал следующий вариант.
Является ли он приемлимым или можно еще улучшить?
$users = User::whereHas(
'posts', function($q) {
global $request;
$unixDate = strtotime($request->date);
$year = date('Y',$unixDate);
$month = date('m',$unixDate);
$day = date('d',$unixDate);
$q->whereYear('created_at',$year);
$q->whereMonth('created_at',$month);
$q->whereDay('created_at',$day);
}
)->get();
return $users;