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... :)