'Laravel Problem Call to undefined method App\Models\User::getRoleNames()

@extends('layouts.app')


@section('content')

<div class="row">

    <div class="col-lg-12 margin-tb">

        <div class="pull-left">

            <h2>Users Management</h2>

        </div>

        <div class="pull-right">

            <a class="btn btn-success" href="{{ route('users.create') }}"> Create New User</a>

        </div>

    </div>

</div>


@if ($message = Session::get('success'))

<div class="alert alert-success">

  <p>{{ $message }}</p>

</div>

@endif


<table class="table table-bordered">

 <tr>

   <th>No</th>

   <th>Name</th>

   <th>Email</th>

   <th>Roles</th>

   <th width="280px">Action</th>

 </tr>

 @foreach ($data as $key => $user)

  <tr>

    <td>{{ ++$i }}</td>

    <td>{{ $user->name }}</td>

    <td>{{ $user->email }}</td>

    <td>

      @if(!empty($user->getRoleNames()))

        @foreach($user->getRoleNames() as $v)

           <label class="badge badge-success">{{ $v }}</label>

        @endforeach

      @endif

    </td>

    <td>

       <a class="btn btn-info" href="{{ route('users.show',$user->id) }}">Show</a>

       <a class="btn btn-primary" href="{{ route('users.edit',$user->id) }}">Edit</a>

        {!! Form::open(['method' => 'DELETE','route' => ['users.destroy', $user->id],'style'=>'display:inline']) !!}

            {!! Form::submit('Delete', ['class' => 'btn btn-danger']) !!}

        {!! Form::close() !!}

    </td>

  </tr>

 @endforeach

</table>


{!! $data->render() !!}


<p class="text-center text-primary"><small>Tutorial by ItSolutionStuff.com</small></p>

@endsection


Solution 1:[1]

Im agree with Gary, if you are using Spatie add the next code to User.php

use Spatie\Permission\Traits\HasRoles;

class User extends Authenticatable { use HasApiTokens, HasFactory, Notifiable, HasRoles;

Solution 2:[2]

Please add this method into User.php model file

public function getRoleNames()
    {
        return $this->belongsToMany(Role::class);

    }

If this method not work then share you table structure and user model file code.

Solution 3:[3]

In the controller that call this view, you should to do:

$data = Model::all(); // ---> this solved that for me

return view('model.view',compact('data'));

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Aaron Lara
Solution 2
Solution 3 Karl Hill