inside EmployeeController
in the edit
function, i have this code
public function edit($id) { $employees = Employee::find($id); $departmentlists = Department::pluck('id', 'name'); return view('employees.edit', compact('employees', 'departmentlists')); }
and inside edit.blade.php
to display the dropdown
i have this code
{!! Form::open(['action' => ['EmployeeController@update', $employees->id], 'method' => 'POST', 'autocomplete' => 'off', 'class' => 'form-horizontal', 'enctype' => 'application/x-www-form-urlencoded']) !!} <div class="card"> <div class="card-header card-header-primary"> <h4 {{ Form::label('', 'Change Employee Data', ['class' => 'card-title']) }} </h4> <p class="card-category"></p> </div> <div class="card-body"> <div class="row"> <div class="col-md-12 text-right"> <a href="{{ route('employees.index') }}" class="btn btn-sm btn-primary" style="font-size:12px"> <i class="material-icons">keyboard_backspace</i> {{ __('kembali') }} </a> </div> </div> <div class="row"> {{ Form::label('Name', '', ['class' => 'col-sm-2 col-form-label']) }} <div class="form-group col-sm-7"> {{Form::text('name', $employees->name, ['class' => 'form-control', 'placeholder' => 'Name', 'required'])}} <p style="color: red;">@error('name') {{ $message }} @enderror</p> </div> </div> <div class="row"> {{ Form::label('Department', '', ['class' => 'col-sm-2 col-form-label']) }} <div class="col-md-7"> <div class="form=group"> @foreach($departmentlists as $dl) <option value="{{ $dl->id }}" @if($dl->id==$employees->department_id) selected='selected' @endif >{{ $employees->name }}</option> @endforeach <p style="color: red;">@error('id') {{ $message }} @enderror</p> </div> </div> </div> <div class="row"> {{ Form::label('Keterangan', '', ['class' => 'col-sm-2 col-form-label']) }} <div class="form-group col-sm-7"> {{ Form::textarea('information', $employees->information, ['class' => 'form-control', 'placeholder' => 'Keterangan', 'rows' => '6', 'cols' => '50']) }} </div> </div> </div> <div class="card-footer ml-auto mr-auto"> {{ Form::hidden('_method','PUT') }} {{ Form::submit('Ubah', ['class' => 'btn btn-primary']) }} </div> </div> {!! Form::close() !!}
This is the employees table and this is departments table
Now, the goal is i want the dropdown on edit page to display department name of the employee belongs to, while the dropdown still have all of the department name. so i change can it, but when i run this code it gives me this error.
Trying to get property ‘id’ of non-object (View:
C:xampphtdocsims-it-laravel7resourcesviewsemployeesedit.blade.php)
i have read other threads here but those code still doesn’t solve the problem
Advertisement
Answer
$departmentlists = Department::pluck('id', 'name');
Later You use
@foreach($departmentlists as $dl)
and $dl->id
$dl
is NOT an object, it is an array because of the pluck()
function.
More precisely it looks like this
[ "abc" => 1 "xyz" => 2 "foo" => 3 ]
Note: To see it Yourself try using dd($departmentlists)
or dump($departmentlists)
Please see Laravel Eloquent Pluck
In this case You might want to use Department::select(['id', 'name'])->get()
as it will return collection of objects with specified properties.