Как переписать этот код в Laravel?

Здравствуйте.
Стоит задача отфильтровать всех пользователей сайта, по дате создания поста.
Соответственно, на вход принимаем дату, возвращаем только пользователей.
На данный момент у меня получается вот такой лютый говнокод.
Как его лучше всего переписать?

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;
  • Вопрос задан
  • 133 просмотра
Решения вопроса 1
@NubasLol
$users = User::whereHas('posts', function($q) use ($request) {
            $q->where('created_at', '>', \Carbon\Carbon::parse($request->date));
        }
        )->get();
        return $users;
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы