Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

mozew's avatar
Level 6

How to create option in laravel?

I want to generate a list on items in a drop down based on a previous choice from another select. All items ar in the database.

Here is what I did:

Javascript:

$(document).ready(function () {
    $(document).on('change', '#province_name', function() {
        var province_id = $(this).val();
        var div = $(this).parent();
        var op = " ";
        $.ajax({
            type: 'get',
            url: '{!!URL::to('admin/findIDProvince')!!}',
            data: {'id':province_id},
            success: function(data){
                for (var i = 0; i < data.length; i++){
                    op += '<option value="'+data[i].id+'">'+data[i].city_name+'</option>';
                }
                div.find('#city_name').html(" ");
                div.find('#city_name').append(op);
            },
            error: function(){
                console.log('success');
            },
        });
    });
});

Routes (web.php):

Route::namespace('Admin')->prefix('admin')->middleware('auth', 'CheckAdmin')->group(function (){
    $this->get('/findIDProvince', 'SchoolsListController@findIDProvince');
});

Controller (Admin/SchoolsListController.php):

public function findIDProvince(Request $request)
    {
        $data = City::select('city_name', 'id')->where('province_id', $request->id)->take(100)->get();
        return response()->json($data);
    }

HTML (view.blade.php)

<div class="form-group">
    <label class="col-md-3" for="province_name">province_name</label>
    <div class="col-md-9">
        <select id="province_name" name="province_name" class="form-control col-md-12" required>
            @foreach($province_names as $province_name)
                <option value="{{ $province_name->id }}">{{ $province_name->province_name }}</option>
            @endforeach
        </select>
    </div>
</div>
<div class="form-group">
    <label class="col-md-3" for="city_name">city_name</label>
    <div class="col-md-9">
        <select id="city_name" name="city_name" class="form-control col-md-12" required>
        </select>
    </div>
</div>

What am I doing wrong?

0 likes
7 replies
jlrdw's avatar

I've already told you fix these two lines

div.find('#city_name').html(" ");
div.find('#city_name').append(op);

You are probably replacing the same thing over and over because of using ID and not class. I mentioned to you to draw from the jQuery manual and Find a better example.

Practice a small example first of building a page element.

1 like
mozew's avatar
Level 6

I have forgotten HTML (view.blade.php) before. Look at this. Thanks

mozew's avatar
Level 6

@jlrdw

How do fix it these two lines?

div.find('#city_name').html(" ");
div.find('#city_name').append(op);
Cronix's avatar
Cronix
Best Answer
Level 67

replace them with $('#city_name').html(op);

1 like
Cronix's avatar

You could simplify it a bit as well

$(document).ready(function () {
    $(document).on('change', '#province_name', function() {
        var province_id = $(this).val();
        var select = $('#city_name');

        $.ajax({
            type: 'get',
            url: '{!!URL::to('admin/findIDProvince')!!}',
            data: {'id':province_id},
            success: function(data){
                select.html(''); // clear the options
                for (var i = 0; i < data.length; i++){
                    select.append('<option value="'+data[i].id+'">'+data[i].city_name+'</option>');
                }
            },
            error: function(){
                console.log('success');
            },
        });
    });
});
mozew's avatar
Level 6

Oh, I could not solve this simple.

Please or to participate in this conversation.