Laravel возвращает данные по сортировке - PullRequest
0 голосов
/ 29 августа 2018

У меня проблема с возвратом данных json и sort их в laravel, они просто появляются в случайном порядке.

Что я сделал до сих пор

  1. Я пытался вернуть данные по их id из базы данных и с помощью JavaScript, как:

    result.sort(function(a,b) { return (a.id > b.id) ? 1 : ((b.id > a.id) ? -1 : 0); }); Результат был случайным порядком (сортировка)

  2. Я добавил столбец sort в свою базу данных и попытался получить свою базу данных по предоставленным там номерам (результат был случайным порядком)

  3. Я пытался добавить ->orderByRaw('set_specification.sort') в свой код функции и получать заказы по нему (результат был случайным порядком)

Logic

  1. Я выбираю set
  2. Set ребенок появится на лезвии в порядке sort столбца, который я укажите цифры в нем.

код

controller

public function selectset($id){
      $selectsets = DB::table('sets')
        ->where('sets.id', '=', $id)
        ->join('set_specification', 'sets.id', '=', 'set_specification.set_id')
        ->join('specifications', 'set_specification.spec_id', '=', 'specifications.id')
        ->orderByRaw('set_specification.sort')
        ->get();
      return response()->json($selectsets);
    }

JavaScript

$(document).ready(function() {
    $('select[name="selectset"]').on('change', function() {
      var id = $(this).val();
      if(id) {
      $.ajax({
        url: '{{ url('admin/selectset') }}/'+encodeURI(id),
        type: "GET",
        dataType: "json",
        success:function(result) {


          result.sort(function(a,b) {
            return (a.id > b.id) ? 1 : ((b.id > a.id) ? -1 : 0);
          });

          console.log(result);

//rest of code..
}

Вопросы

Даже когда я возвращаю свои данные с помощью сортировки ajax (как вы видите в моем коде) в консоли, он возвращается правильно, но в блейде он выглядит так, как он хочет!

screenone

в случае, если изображение выше не будет работать здесь снова

Вопрос

  1. Как я могу исправить эту проблему сортировки?

Обновление

Я изменил свой код Ajax на:

result.sort(function(a,b) {
  return (a.sort > b.sort) ? 1 : ((b.sort > a.sort) ? -1 : 0);
});

и результат тот же снимок экрана

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Обновите ваш код в контроллере, как показано ниже

добавить одну функцию

public function cmp($a, $b)
{
    return strcmp($a['sort'], $b['sort']);
}

Обновить функцию выбора, как показано ниже

public function selectset($id){
$selectsets = DB::table('sets')
    ->where('sets.id', '=', $id)
    ->join('set_specification', 'sets.id', '=', 'set_specification.set_id')
    ->join('specifications', 'set_specification.spec_id', '=', 'specifications.id')
    ->orderByRaw('set_specification.sort')
    ->get();
usort($selectsets, array($this, "cmp"));
return response()->json($selectsets);
}
0 голосов
/ 29 августа 2018

По ссылке, указанной вами в комментариях: https://www.codepile.net/pile/RlQoa6Dk

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

Вот почему вы всегда получаете случайные заказы ...

Вы должны:

  1. Сделайте первый вызов Ajax
  2. элемент foreach в ответе, сделать второй вызов ajax
  3. добавить вычисленный html для каждого элемента в ответе
  4. После завершения каждого вызова ajax или, по крайней мере, нескольких вызовов ajax для вычисления html, закажите исходный ответ, который к настоящему времени имеет html.
  5. элемент foreach в ответе, добавить вычисленный html

Редактировать

Просто добавление строки перед выполнением вызова ajax сработало.

<script defer>
$(document).ready(function() {
    $('select[name="selectset"]').on('change', function() {
        var id = $(this).val();
        if(id) {
            $.ajax({
                url: '{{ url('admin/selectset') }}/'+encodeURI(id),
                type: "GET",
                dataType: "json",
                success:function(result) {
                    $('div#dataaamsg').empty();
                    $('div#dataaamsg').append('Use <kbd>CTRL</kbd> or <kbd>SHIFT</kbd> button to select multiple options');
                    result.sort(function(a,b) {
                        return (a.sort > b.sort) ? 1 : ((b.sort > a.sort) ? -1 : 0);
                    });

                    $.each(result, function(key1, value1) {

                        var vvvid = value1.id;

                        if(value1['type'] == 'textfield'){
                            var my_row = $('<div class="row mt-20 ccin">');
                            $('div#dataaa').append(my_row);
                        }else if(value1['type'] == 'textareafield'){
                            var my_row = $('<div class="row mt-20 ccin">');
                            $('div#dataaa').append(my_row);
                        }else{
                            var my_row = $('<div class="row mt-20">');
                            $('div#dataaa').append(my_row);
                        }

                        // second data
                        $.ajax({
                            url: '{{ url('admin/findsubspecification') }}/'+value1['id'],
                            type: "GET",
                            dataType: "json",
                            success:function(data) {
                                // Check result isnt empty
                                var helpers = '';
                                $.each(data, function(key, value) {
                                    helpers += '<option value="'+value.id+'">'+value.title+'</option>';
                                });

                                if(value1['type'] == 'textfield'){
                                    var my_html = '{{ Form::open() }}<input name="product_id" id="product_id" type="hidden" value="{{$product->id}}"><input name="specification_id" id="specification_id" type="hidden" value="'+vvvid+'"><div class="col-md-4">'+value1.title+'</div>';
                                    my_html += '<div class="col-md-6"><input id="text_dec" name="text_dec[]" placeholder="text field" class="text_dec form-control"></div>';
                                    my_html += '<div class="col-md-2"><button type="button" id="custmodalsavee" class="custmodalsavee btn btn-xs btn-success">Save</button>{{Form::close()}}</div>';
                                    my_row.html(my_html);
                                }else if(value1['type'] == 'textareafield'){
                                    var my_html = '{{ Form::open() }}<input name="product_id" id="product_id" type="hidden" value="{{$product->id}}"><input name="specification_id" id="specification_id" type="hidden" value="'+vvvid+'"><div class="col-md-4">'+value1.title+'</div>';
                                    my_html += '<div class="col-md-6"><textarea id="longtext_dec" name="longtext_dec[]" placeholder="text area field" class="longtext_dec form-control"></textarea></div>';
                                    my_html += '<div class="col-md-2"><button type="button" id="custmodalsavee" class="custmodalsavee btn btn-xs btn-success">Save</button>{{Form::close()}}</div>';
                                    my_row.html(my_html);
                                }else{
                                    var my_html = '{{ Form::open() }}<input name="product_id" id="product_id" type="hidden" value="{{$product->id}}"><div class="col-md-4">'+value1.title+'</div>';
                                    my_html += '<div class="col-md-6"><select class="subspecifications form-control tagsselector" id="subspecifications" name="subspecifications[]" multiple="multiple">'+helpers+'</select></div>';
                                    my_html += '<div class="col-md-2"><button type="button" id="sendspacsdatato" class="sendspacsdatato btn btn-xs btn-success">Save</button>{{Form::close()}}</div>';
                                    my_row.html(my_html);
                                }


                            }
                        });
                        // second data

                    });
                }
            });
        }else{
            $('div#dataaa').empty();
        }
    });
});
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...