#laravel
Вопрос:
Я хочу получить статус моего друга i-e (в ожидании, или он принял мой запрос, или он блокирует меня) для этого я получаю всех своих друзей, кроме одного, и получаю их соответствующий статус
$user=User::with(["friendships"])->where('id','!=',Auth::user()->id)->get();
моя модель
function friendships() {
return $this->hasMany('AppModelsFriendship','first_user','id');
}
моя таблица базы данных дружбы выглядит так
id first_user second_user status
где первый пользователь-это тот, кто отправляет запрос, а второй пользователь-тот, кто получает запрос, где статус либо ожидает, принят, либо заблокирован .так как я мог загрузить всех своих друзей и проверить статус.
Ответ №1:
Итак, во-первых, вы говорите «я», чтобы получить все мои дружеские отношения. Поэтому для этого запрос нужно будет изменить. Следующий запрос, который у вас есть прямо сейчас, выглядит следующим образом:
$user=User::with(["friendships"])->where('id','!=',Auth::user()->id)->get();
Это означает получение ВСЕХ пользователей, которые в данный момент НЕ вошли в систему. Все, что вам нужно, — это получить вашего текущего аутентифицированного пользователя и загрузить отношения дружбы, чтобы сделать это, вы можете сделать следующее:
$user = User::with('friendships')->find(Auth::id());
Итак, чтобы разобраться в этом, ->find(Auth::id())
вы получаете пользователя с этим идентификатором. Во-вторых, вы возвращаете только одного пользователя, а не набор пользователей, которые вы получили бы при использовании ->get()
.
Тогда вы могли бы сделать что-то подобное в файле blade.
@foreach($user->friendships as $friendship)
$friendship->status
@endforeach
Редактировать:
Таким образом, мое непонимание ситуации, когда я получаю всех пользователей, а затем присваиваю статус дружбы с текущим пользователем, если он у них есть, может выглядеть так
$authenticatedUserId = Auth::id();
$users = User::with([
'friendships' => function ($query) {
$query->where('first_user', $authenticatedUserId);
}
]);
А затем отобразите это вот так:
@foreach($users as $user)
@if($user->friendships->count() > 0)
$user->friendships->first()->status // A user should only have one friendship with another user
@else
// No friendship so add a button to add a friendship
@endif
@endforeach
Обратите внимание, что это будет включать только запросы на отправку друзей, а не любые запросы, отправленные вам другим пользователем. Но они будут в списке пользователей, поэтому вы можете получить дубликаты запросов на добавление в друзья, которые в этом случае вам нужно будет отфильтровать. Ознакомьтесь с документацией для получения дополнительной помощи в этом https://laravel.com/docs/8.x/eloquent-relationships
Комментарии:
1. хорошо, но я также хочу загрузить другого пользователя, чтобы я мог отправить ему запрос
2. Внес некоторые изменения и приложил документы для получения дополнительной помощи.
Ответ №2:
Вы можете попробовать этот код
$userID = Auth::id();
$user=User::whereDoesntHave('friendships', function($q){
$q->where('first_user', '=', $userID );
})->get();
Комментарии:
1. Это покажет пользователей, которые не имеют никаких отношений с текущим пользователем, но отношения были бы сформированы со статусом «ожидание», например, если бы они были отправлены, но не приняты.
2. На самом деле он не хочет видеть статус пользователя, вошедшего в систему.