PHP laravel поиск столбца не работает эффективно с -> editcolumn getdatatable - PullRequest
0 голосов
/ 09 мая 2020

Скрипт для столбца поиска:

<script>
    $.fn.dataTable.ext.errMode = 'none';
    var tableObj;

    $(document).ready(function(){
        // debugger;
        $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            }
        });

         tableObj = $('{{ $class_name }}').DataTable({

                searchable: true,
                processing: true,
                serverSide: true,
                 "aaSorting": [],
                cache: true,
                type: 'GET',
                ajax: '{{ $routeValue }}',
                @if(isset($table_columns))
                columns: {!!$setData!!}
                @endif
                initComplete: function () {
                    this.api().columns().every(function () {
                        var column = this;
                        var input = document.createElement("input");
                        $(input).appendTo($(column.header()))
                        .on('keyup', function () {

                            column.search($(this).val(), false, false, true).draw();
                        });

                    });
                }


        });

          $('.datatable').find('select.form-control').removeClass('form-control input-sm').addClass('full-width').attr('data-init-plugin','select2');        
    });
    // console.log("it is working");
  </script>

Функция контроллера для получения данных:

 $records = array();
   dd($record);
             $records = User::join('roles', 'users.role_id', '=', 'roles.id')

            ->select(['users.id','users.name', 'phone','users.default_bill_address','area','users.created_at','website','user_status','reason_inactive','is_online','login_enabled','role_id',

              'slug'])->orderBy('users.created_at', 'desc');

             if(!isset($_GET['order'])){
              $records = $records ->whereIn('users.id',$list_his)->orderBy('users.created_at', 'desc');
           }
        return Datatables::of($records)
       ->editColumn ('default_bill_address', function($records){
          if($records->default_bill_address)
          {
            $add = Address::where('id',$records->default_bill_address)->first();
            if($add)
                return $add->fullAddress();
            else
                return '-';
         }
         else
            return '-';
        })

Снимок экрана:

снимок экрана, относящийся к панели, где находится столбец поиска присутствует.

Описание

Я редактировал много столбцов одинаковым образом из разных таблиц, когда я ищу в столбце специфицированного c, он ничего не возвращает, потому что связанный текст нет в таблице запроса, и я не могу присоединиться к такому количеству таблиц, чтобы получить результат при поиске.

1 Ответ

0 голосов
/ 09 мая 2020

Самое простое решение, которое я получил

В вашем скрипте просто поменяйте одну строку serverSide: true на serverSide: false ,

<script>
    $.fn.dataTable.ext.errMode = 'none';
    var tableObj;

    $(document).ready(function(){
        // debugger;
        $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            }
        });

         tableObj = $('{{ $class_name }}').DataTable({

                searchable: true,
                processing: true,
                serverSide: false,
                 "aaSorting": [],
                cache: true,
                type: 'GET',
                ajax: '{{ $routeValue }}',
                @if(isset($table_columns))
                columns: {!!$setData!!}
                @endif
                initComplete: function () {
                    this.api().columns().every(function () {
                        var column = this;
                        var input = document.createElement("input");
                        $(input).appendTo($(column.header()))
                        .on('keyup', function () {

                            column.search($(this).val(), false, false, true).draw();
                        });

                    });
                }


        });

          $('.datatable').find('select.form-control').removeClass('form-control input-sm').addClass('full-width').attr('data-init-plugin','select2');        
    });
    // console.log("it is working");
  </script>

это изменит поиск на стороне сервера на клиентский. поиск по содержанию, а не по данным. Как глупо я ошибся

...