Невозможно извлечь данные из динамически связанного выпадающего списка выбора - Laravel - PullRequest
0 голосов
/ 10 декабря 2018

Я работаю над динамически связанным выпадающим меню, где оно должно извлекать данные на основе выбранного значения.

Я пытаюсь отобразить банковские реквизиты в зависимости от района> муниципалитет> Информация о банке

Я могу успешно получить список для первого раскрывающегося списка.Но я не могу получить от него больше данных. Данные возвращаются пустыми The second dropdown return empty results.

The url returns 200 status code

Я новичок в разработке и разработке.Спасибо за помощь.

В дополнение к этому я добавлю еще один вопрос, если я хотел бы добавить больше таблиц вместе с банками при выборе раскрывающегося списка, например: транзакции.Как мне этого добиться?

index.blade.php

 <div class="container">
        {!!Form::open()!!}
        <div class="form-group">
            <label for=""> District</label>
            <select name="district_option" id="district_option" class="form-control">
                <option value="0" disabled="true" selected="true">------ Select District --------</option>
                @foreach ($districts as $key => $district)
                <option value="{{$district->id}}">{{$district->district_name}}</option>
                @endforeach
            </select>
        </div>
        <div class="form-group">
            <label for=""> Municipality</label>
            <select name="municipal_option" id="municipal_option" class="form-control">
                <option value="0" disabled="true" selected="true">------ Select District First--------</option>
            </select>
        </div>
<table class="table table-striped">
    <thead>
        <tr> 

           <td> Bank Name</td>
        <td>Bank Acc No </td>
        <td>Bank IFSC Code</td>
        </tr>        
    </thead>
            <tbody>
                <tr> 
                        {{-- <td>1</td>
                        <td>1</td>
                        <td>1</td> --}}
                </tr>
            </tbody>
</table>
        {!!Form::close()!!}

Скрипт

   $('#district_option').on('change',function(e){
        console.log(e);
        var district_id = e.target.value;
        var BASEURL = "{!! url('/admin/bank/') !!}";
        console.log(district_id);
        $.get( BASEURL + '/municipalview?district_id=' + district_id, function(data){
            console.log(data);
            $('#municipal_option').empty();
            $('#municipal_option').append('<option value="0" disabled="true" selected="true">------ Select District First--------</option>');
         $.each(data,function(index, municipalObj){
            $('#municipal_option').append('<option value="'+ municipalObj.id +'"> '+ municipalObj.municipal_name +' </option>');
               })
                });
                }); 


        $('#municipal_option').on('change',function(e){
        // console.log(e);  
        var municipal_id = e.target.value; 
        var BASEURL = "{!! url('/admin/bank/') !!}";
        console.log(municipal_id);
        $.get( BASEURL + '/bankview?bank_id=' + municipal_id, function(data){
            console.log(data);

                });
                }); 

Мои файлы маршрутов:

// добавить банковские реквизиты

Route::resource('bank', 'bankController');
Route::get('admin/bank/municipalview/', 'bankController@municipalView');
Route::get('admin/bank/bankview/', 'bankController@bankView');

bankController File

 public function municipalView()
{


    $districts_id = Input::get('district_id');
    $municipalities = Municipality::where('district_id', '=', $districts_id )->get();
    return response()->json($municipalities) ;
}   

public function bankView()
{

    $municipals_id = Input::get('municipal_id');
    $banks = Bank::where('district_id', '=', $municipals_id )->get();
    return response()->json($banks) ;
}   

1 Ответ

0 голосов
/ 10 декабря 2018

В настоящее время проблема заключается в том, что у вас есть два последующих запроса, где ваш шаблон блэйда будет динамически отображать только результаты первого.У вас есть несколько вариантов:

A) предварительно загрузить все данные, отправить их на клиентскую сторону и позволить Javascript обрабатывать их.Например, вы отправите объект типа:

{regionA: ["bank1", "bank2", "bank3"], regionB ["bank4, "bank4", "bank5"] }

Затем динамически создайте параметры с помощью javascript на основе структуры.

B) Пусть javascript (AJAX) обрабатывает второй запрос для более глубокого уровняданных и заполните параметры.Есть библиотеки, которые могут помочь с этим (например, Selectize.js).

C) Существуют высокоуровневые интерфейсные среды, такие как Vue.js, которые могут помочь в управлении «состоянием» клиентского браузера.Это может быть чем-то, на что стоит обратить внимание, если вы хотите сделать более сложную логику на стороне клиента.

Обновление:

Глядя на ваш код, я думаю, что проблема в том, как данные запроса передаются вваши методы контроллера.Быстрое решение состоит в том, чтобы передать (Request $ request) в функцию и посмотреть, что передается, но я бы посоветовал потратить некоторое время на отношения Eloquent и посмотреть, как можно получить ORM Laravel (https://laravel.com/docs/5.7/eloquent)).сделайте это для вас. Вкратце, у вас могут быть такие маршруты:

Route::get('admin/bank/municipalview/{District}', 'bankController@municipalView');

А затем такой контроллер:

 public function municipalView(Disctrict $district)
{

    $municipalities = District::municipalities();
    return response()->json($municipalities) ;
}   

и убедитесь, что у вас есть модель Disctrict (phpArtisan делает модель)

в модели вы можете определить отношения:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Disctrict           

 /**
 * Get the municipalities for a district.
 */
public function municipalities()
   {
       return $this->hasMany('App\Municipality');
   }
}
...