Я хочу получить статус всех моих друзей в ларавеле

#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. На самом деле он не хочет видеть статус пользователя, вошедшего в систему.