Запрос на Laravel

есть таблица пользователей

введите сюда описание изображения

таблица данных пользователя

введите сюда описание изображения

таблица заказанных услуг

введите сюда описание изображения

таблица избранных

введите сюда описание изображения

таблица диалогов

введите сюда описание изображения

таблица сообщений

введите сюда описание изображения

как мне вывести всех пользователей, пол которых gender != Auth::user()->id сортируя их по user_services.top desc

  • нужно проверить в избранных ли этот пользователя у Auth::user()->id, есть ли с ним диалог dialogs и есть ли приветственное сообщение от Auth::user()->id users.id

пока что у меня так

 $users = DB::table('users')
            ->leftJoin('user_attributes','user_attributes.user_id','users.id')
            ->leftJoin('cities','cities.id','user_attributes.city_id')
            ->leftJoin('user_services','user_services.user_id','users.id')
            ->join('favorites', function($join)
            {
                $join->on('favorites.favorite_id','=', 'users.id')
                    ->where('favorites.user_id','=', Auth::user()->id);
            })
            ->join('dialogs', function($join)
            {
                $join->on('dialogs.recipient_id','=', 'users.id')
                    ->where('dialogs.user_id','=', Auth::user()->id)
                    ->orWhere('dialogs.recipient_id','=',  Auth::user()->id)
                    ->where('dialogs.user_id','=', 'users.id');
            })
            ->join('dialog_messages', function($join)
            {
                $join->on('dialog_messages.dialog_id','=', 'dialogs.id')
                    ->where('dialog_messages.user_id','=', 'users.id')
                    ->where('dialog_messages.status','=', 3);
            })
            ->where('user_attributes.gender','!=', Auth::user()->attributes->id)
            ->orderBy('user_services.top','desc')
            ->orderBy('users.id','desc')
            ->paginate(50);

но проблема, как мне вывести флаги 1 - есть в избранных, 0 нет в избранных, 1 есть приветсnвенное сообщение со status - 3, 0 нет сообщения со status - 3

до этого было так, но это ужас, и хочется как-то впихнуть в один запрос

$users = DB::table('users')
                    ->leftJoin('user_attributes','user_attributes.user_id','users.id')
                    ->leftJoin('user_services','user_services.user_id','users.id')
                    ->where('user_attributes.gender','!=', Auth::user()->attributes->id)
                    ->orderBy('user_services.top','desc')
                    ->orderBy('users.id','desc')
                    ->paginate(50);

        foreach ($users as $user) {
            $dialog = Dialog::where('user_id','=', Auth::user()->id)
                ->where('recipient_id','=', $user->id)
                ->orWhere('recipient_id','=', Auth::user()->id)->where('user_id','=', $user->id)->first();
            if ($dialog){
                $user->dialog = $dialog->id;
                $like = $dialog->messages->where('user_id','=', Auth::user()->id)
                    ->where('status','=', 3)->first();

                if ($like) $user->like = 1;else $user->like = 0;
            }else{
                $user->dialog = 0;
                $user->like = 0;
            }
            $city = City::where('id','=',$user->attributes->city_id)->first();
            $user->city = $city['title'];

            $count = UserPrivate::where('user_id','=', $user->id)->where('published','=',1)->count();
            $user->images = $count;
            $favorite = Favorite::where('user_id','=', Auth::user()->id)->where('favorite_id','=', $user->id)->first();
            if ($favorite) $user->favorite = 1;else $user->favorite = 0;
        }

Ответы (0 шт):