Ответ на ваш первый вопрос: почему я вижу первую строку в базе данных для каждого пользователя?
Если вы хотите выбрать первого друга, связанного с конкретным пользователем, я бы порекомендовал вам использовать Eloquent для определения отношений:
https://laravel.com/docs/5.6/eloquent-relationships.
Убедитесь, что ваша модель пользователя имеет следующий метод, который возвращает экземпляр отношения:
public function friends()
{
return $this->hasMany(Friend::class, 'userId');
}
Затем вы можете сделать следующее, чтобы выбрать первый запрос на добавление в друзья:
$user = User::findOrFail($id);
$friend= $user->friends->first();
То, что это вернет, будет первым Другом, который связан с этим конкретным Пользователем. Так что это будет уникальным для каждого пользователя.
Если вы хотите выбрать все запросы на добавление в друзья, которые привязаны к этому пользователю, вы можете использовать:
$user = User::find($id);
$friends = $user->friends;
Ответ на ваш второй вопрос: как мне решить проблему с тем, что каждый запрос принимается при использовании функции accept?
Сначала вы должны выбрать конкретный вопрос. Прямо сейчас вы обновляете все запросы одновременно из-за того факта, что where возвращает экземпляр коллекции и что вы в настоящее время не выбираете уникальный идентификатор. Если вы хотите принять конкретный запрос, я бы порекомендовал использовать следующий код:
public function accept(Request $request, User $user, $friendId){
Friend::where('accepted', 0)
->where('request_sent', 1)
->where('userId', $user->id)
->where('friendId', $friendId)
->update(
[
'accepted' => 1,
'request_sent' => 0,
]
);
return back();
}