Skip to content
Advertisement

How to get saved value from dropdown in edit page laravel?

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.

User contributions licensed under: CC BY-SA
6 People found this is helpful
Advertisement