Как получить значения в таблицы Laravel

Есть таблица с пользователями User и есть таблица с друзьями. К примеру, у пользователя Joni есть друг Kate и Alex, надо получить их данные.

id = 1, name = Joni

id = 2, name = Kate

id = 3, name = Alex

И таблица UserRole

role_id = 1, role_access = 2

role_id = 1, role_access = 3

Сейчас я вывожу их по Id, то есть у Joni есть друг 2,3,а надо у Joni есть друг Kate, Alex.

В модели User

public function roleAccess()
{
    return $this->hasMany(RoleAccess::class);
}

Контроллер

public function index()
{
    $roleAccess = User::all();
    return view('admin.roleAccess.index', compact('roleAccess'));
}

Вывожу список

@foreach($roleAccess as $key => $role)
  ID - {{ $role->id }} = 
    @foreach($role->roleAccess as $key => $item)
       <span class="badge badge-info">{{ $item->id }},</span>
    @endforeach
@endforeach

Получаю ID - 1 = 2,3

Вопрос как получить запись ID - 1 = Kate,Alex


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

Автор решения: E_K

Если брать за основу пример с друзьями, вам следует:

  1. Добавить связь Many To Many в модель User.

    Так как пользователь может иметь несколько друзей и быть другом для многих.

public function friends()
{
    return $this->belongsToMany(User::class, 'user_friends', 'user_id', 'friend_id');
}
  1. Добавить pivot таблицу, которая будет хранить связи user_friends с колонками 'user_id', 'friend_id'. Обе колонки указывают на id в таблице User.

  2. Получаем данные в контроллере. Не забываем использовать метод withв контроллере, иначе в шаблоне будет "жадная загрузка" с кучей лишних запросов.

public function index()
{
    $user = User::with('friends')->find(24);
    return view('layouts.index', compact('user'));
}
→ Ссылка