Запрос на 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;
}





