试图获得非对象laravel 5.3,index.blade的属性

I am stuck with this error in Laravel:

Trying to get property of non-object (View: C:...esources\views\admin\users\index.blade.php)

Is anything wrong with my code?

This My index

@extends('layouts.admin')


@section('content')

    <h1>Users</h1>


    <table class="table">
        <thead>
        <tr>
            <th>Id</th>
            <th>Name</th>
            <th>Email</th>
            <th>Role</th>
            <th>Status</th>
            <th>Created</th>
            <th>Updated</th>
            <th>Photo</th>
        </tr>
        </thead>
        <tbody>

        @if($users)

            @foreach($users as $user)

        <tr>
            <td>{{$user->id}}</td>
            <td>{{$user->name}}</td>
            <td>{{$user->email}}</td>
            <td>{{$user->role->name}}</td>
            <td>{{$user->active == 1 ? 'Active' : 'Not Active'}}</td>
            <td>{{$user->created_at->diffForHumans()}}</td>
            <td>{{$user->updated_at->diffForHumans()}}</td>
            <td>{{$user->photo_id}}</td>
        </tr>
                @endforeach
            @endif
        </tbody>
    </table>
@stop

This my Controller

public function index()
    {
        //
        $users = User::all();

        return view('admin.users.index', compact('users'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
        $roles = Role::pluck('name','id')->all();

        return view('admin.users.create', compact('roles'));
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(UsersRequest $request)
    {
            //Buat bikin create dengan method ini

        User::create($request->all());

        return redirect('/admin/users');

//        return $request->all();
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
        return view('admin.users.show');
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
        return view('admin.users.edit');
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}

This my Request

class UsersRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            //
            'name'=>'required',
            'password'=>'required',
            'email'=>'required',
            'active'=>'required',
            'role_id'=>'required',
            'photo_id'=>'required|image|mimes:jpeg,png,jpg,gif,svg|max:7098',
        ];
    }
}

This means (inside the controller)

$users = User::all();

returns empty object. There are no users in the db. The error probably comes from (admin/users/index.blade.php)

{{$user->id}}

and the other lines follow as well.

Before looping over the users, check if the data is empty. Correct this line

@if($users)

to look like this

@if($users->toArray())

It will return an empty array if there are no records for users and never enter in loop. This will correct your error.

PS: Put an else statement for the @if statement with proper message so you can know it worked.

Please change this line

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

to

<td>{{ $user->role ? $user->role->name : '-' }}</td>

Should work now... :)