Как отфильтровать коллекцию моделей на основе выбранной опции в раскрывающемся списке в сводной форме? - PullRequest
0 голосов
/ 01 апреля 2019

Я делаю веб-приложение каталога торгового центра. Я хотел бы отобразить группу списка арендаторов на основе параметра раскрывающегося списка. (группа по зонам / этажам / категориям)

image

Initially, I tried to pass the selected option of zone drop down list in form to DirectoryController through routes, but I unable to do it.

<!-- Part of the View -->

        {{Form :: open (array ('route' => array ('directory.group', '$ tenants', 'zone_id')))}}
        
            
                
                     ZONE 
                     FLOOR 
                     КАТЕГОРИЯ 
                
                
                    
                        
                            <! - Зона ->
                            
                                {!! Форма :: выберите ( 'zone_id',
                                    Zone :: pluck ('code', 'id'), null, [
                                        'class' => 'form-control',
                                        'placeholder' => '- Выбрать зону -',
                                        'onchange' => 'this.form.submit ()'
                                    ])
                                !!}
                            
                        
                        
                            <! - Этаж ->
                            
                                {!! Форма :: выберите ( 'floor_id',
                                    Floor :: pluck ('code', 'id'), null, [
                                        'class' => 'form-control',
                                        'placeholder' => '- Выбрать зону -',
                                ]) !!}
                            
                        
                        
                            <! - Категория ->
                            
                                {!! Форма :: выберите ( 'category_id',
                                    Category :: pluck ('name', 'id'), null, [
                                        'class' => 'form-control',
                                        'placeholder' => '- Выбрать зону -',
                                ]) !!}
                            
                        
                    
                
            

        

    {!! Form :: close () !!}

DirectoryController

/**
 * Show the application dashboard.
 * @param array $tenants
 * @param int $zone_id
 *
 * @return \Illuminate\Http\Response
 */
public function group($tenants, $zone_id)
{
    $tenants = $tenants->where('zone_id', $zone_id);

    return view('directory.index', [
        'tenants' => $tenants,
    ]);

}

Моя концепция состоит в том, чтобы передать список арендаторов в DiretoryController @ group, и функция будет фильтровать на основе выбранной опции раскрывающегося списка и возвращать новый список арендаторов обратно в представление и отображать его.

Я был бы очень признателен, если бы было какое-либо предложение или решение.

Ответы [ 2 ]

0 голосов
/ 01 апреля 2019

Значения из формы не будут передаваться в качестве параметров в метод контроллера, вам нужно будет использовать форму класса Request . Вы можете использовать вспомогательную функцию request () :

request()->input('zone_id');

или

Зависимость инъекций

public function group(\Illuminate\Http\Request $request, $tenants)
{
    $tenants = $tenants->where('zone_id', $request->input('zone_id'));

    return view('directory.index', [
        'tenants' => $tenants,
    ]);

}
0 голосов
/ 01 апреля 2019

Вы можете связать onchange для выбора и вызова ajax для каждого события изменения.

  $(document).ready(function () {
        $('#zone_id').on('change',function () {
            var id = this.value;
            $.ajax({
                type: 'GET',
                url: 'url',
                data: {
                    id:id
                },
                dataType: 'json',
                success: function (json) {
                    $('#zone_id').html(' ');
                    $.each(json, function(i, value) {
                        $('#zone_id').append($('<option>').text(value).attr('value', i));
                    });
                }
            });
        });
    });
...