Как получить данные от многих ко многим отношениям в laravel

Я хочу получить всех пользователей и связанные роли в одну таблицу в laravel. но я не мог продолжить, потому что я получаю сообщение об ошибке

Это моя функция контроллера

public function index(){
    if (Auth::user()->isAdmin==1){
        $users = User::with('roles')->get();
        return view('users', campact($users));
    } else {
        abort(403, 'Unauthorized action.');
    }
}

Это функция ролей моей модели пользователя

public function roles()
{
    return $this->belongsToMany(Role::class, 'role_users');
}

Это функция пользователей моего ролевого класса

public function users()
{
    return $this->belongsToMany(User::class,'role_users');
}

Это моя таблица данных

@foreach ($users as $user)
    <tr>
        <td>{{ $user->id }}</td>
        <td>{{ $user->name }}</td>
        <td>{{ $user->email }}</td>
        <td>
            <form method = "post">
            {{ csrf_field() }}
            <div class = "form-group">                
                <select class = "form-control" data-id = "{{$user->id}}" id = "role" name = "role">
                    <option value = "0">Select a Role</option>
                    @foreach ($users->roles as $role)
                    <option  value = "{{ $role->id }}">{{ $role->name }}</option>
                    @endforeach
                </select>
            </div>  
            </form>          
        </td>
        <td>{{ $user->created_at }}</td>
        <td>{{ $user->updated_at }}</td>

        <td><div class = "form-group">
            <form method = "post" id = "userActivate">
            {{ csrf_field() }}
            <label>
                <input type = "checkbox" class = "flat-red isActive" data-id = "{{$user->id}}" @if ($user->isActive) checked @endif>
            </label>

        </form>
    </div>       
        </td>
        <td>
            <form id = "userDelete" method = "post" >
                {{ csrf_field() }}
                <button type = "button" id = "delete" data-id = "{{$user->id}}" class = "btn btn-block btn-danger btn-flat">Delete</button>
            </form>
        </td>
    </tr>
@endforeach

Пожалуйста, помогите мне решить эту проблему.

Что вы хотите получить из таблицы role_user?

ako 10.12.2018 09:50
campact должен (я предполагаю) быть compact?
apokryfos 10.12.2018 09:52

Пожалуйста, предоставьте сообщение об ошибке. У вас есть стол role_user?

Rouhollah Mazarei 10.12.2018 09:52

Campact исправлен на компактный. но та же ошибка под названием «Неопределенная переменная: пользователи (View: /var/www/html/laravel/resources/views/users.blade.php)»

Anushka Deshan 10.12.2018 09:58

Да, у меня есть таблица пользователей ролей, и я хочу получить роли, связанные с каждым пользователем

Anushka Deshan 10.12.2018 09:59

пожалуйста, проверьте мой ответ;)

Saengdaet 10.12.2018 10:01
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
6
5 982
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Отредактируйте эту строку:

return view('users', campact($users));

к:

return view('users', compact('users'));

Появляется ошибка «Свойство [роли] не существует в этом экземпляре коллекции. (Просмотр: /var/www/html/laravel/resources/views/users.blade.php)»

Anushka Deshan 10.12.2018 10:16
Ответ принят как подходящий

Измените код вашего контроллера

public function index(){
  $users = User::with('roles') // Eager loading
               ->get();
  return view('users')->with('users', $users);
}

Затем измените код лезвия с

@foreach ($users->roles as $role)
    <option value = "{{ $role->id }}">{{ $role->name }}</option>
@endforeach

к

@if (count($user->roles) > 0)
@foreach ($user->roles as $role)
    <option value = "{{ $role->id }}">{{ $role->name }}</option>
@endforeach
@endif

Несмотря на то, что у меня возникла ошибка «Неопределенное свойство: stdClass :: $ roles (View: /var/www/html/laravel/resources/views/users.blade.php)»

Anushka Deshan 10.12.2018 10:06

давайте попробуем вернуть $user в ваш контроллер, затем посмотрим результат

Saengdaet 10.12.2018 10:10

Затем снова появляется ошибка под названием «Неопределенная переменная: пользователи (View: /var/www/html/laravel/resources/views/users.blade.php)»

Anushka Deshan 10.12.2018 10:13

как называется ваша миграция для отношения многие ко многим?

Saengdaet 10.12.2018 10:18

2018_12_10_060451_create_role_users_table

Anushka Deshan 10.12.2018 10:19

попробуйте изменить свой код, как этот public function index(){ return User::with('roles')->get(); }

Saengdaet 10.12.2018 10:20

[{«id»: 1, «name»: «Анушка Дешан», «isAdmin»: 1, «email»: «[email protected]», «email_‌ Verified_at»: null, «i‌ sActive» : 1, «created_‌ at»: «2018-11-21 09:41:11», «updated_at»: «2018-12-07 07:56:43», «roles»: []}, {«id ": 2," name ":" Charith Athukorala "," isAdmin ": 2," email ":" [email protected] ", ‌" email_verified_at ": ‌ null," isActive ": 1," c‌ reated_at ":" 2018-11-21 09:57:40 "," updated_at ":" 2018-12-06 04:29:32 "," roles ": []}, {" id ": 19, "name": "Анушка .......... я получил вот такой результат в браузере.

Anushka Deshan 10.12.2018 10:26

давайте попробуем изменить ваш индексный код .. затем измените код foreach с моим кодом $users = User::with('roles')->get(); return view('users')->with('users',$users);

Saengdaet 10.12.2018 10:29

Джеймс! Он работает без заполнения раскрывающегося списка. Как я могу заполнить все роли и выбрать раскрывающийся элемент со связанной ролью для каждого пользователя

Anushka Deshan 10.12.2018 10:35

Вы имеете в виду, что он работает без использования опции выбора? Я снова обновил свой ответ в моем @foreach, давайте еще раз проверим его

Saengdaet 10.12.2018 10:37

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

Anushka Deshan 10.12.2018 10:39

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

Saengdaet 10.12.2018 10:42

Я сделаю то же самое и большое спасибо

Anushka Deshan 10.12.2018 10:44

Другие вопросы по теме