Таблица данных Yajra с использованием поиска и пользовательского фильтра вместе - PullRequest
0 голосов
/ 04 марта 2019
Laravel: 5.6.39

PHP: 7.2.10

Yajra Table: 8.0

Пример кода

$(document).ready( function() {
        var url = "{{ url('/admin/videos') }}";
        $(function() {
            var oTable = $('#admin-videos').DataTable({
                dom: "<'row'<'col-xs-12'<'col-xs-6'l><'col-xs-6'p>>r>"+
            "<'row'<'col-xs-12't>>"+
            "<'row'<'col-xs-12'<'col-xs-6'i><'col-xs-6'p>>>",
                processing: true,
                serverSide: true,
                ajax: {
                    url: url,
                    data: function (d) {
                        d.category = $("#category option:selected").val();
                        d.language = $("#language option:selected").val();
                    }
                },            
                columns: [
                    { data: 'video_checkbox', name: 'video_checkbox' },
                    { data: 'created_at', name: 'created_at' },
                    { data: 'video_label', name: 'video_label' },
                    { data: 'video_link', name: 'video_link' },
                    { data: 'view', name: 'view' },
                    { data: 'video_category', name: 'video_category' },
                ],
                stateSave: true,
                bDestroy: true,
          });

          $('#search-form').on('submit', function(e) {
               oTable.draw();
               e.preventDefault();
            });
        });
   });

Теперь, если я удалю dom, можно будет найти и поиск, и фильтр, но поиск все равно не будет работать, если я удалюФильтры, тогда работает только поиск, я думаю, что должна быть некоторая настройка для dom или чего-то такого, что позволит и поиск, и фильтры.

В документации тоже нет поиска.

Существует одна опция для включения поиска, как показано ниже, но она работает , а не , похоже, работает, также для этого я удалил атрибут dom в приведенном выше коде.

search: {
        "regex": true
    }

1 Ответ

0 голосов
/ 08 марта 2019

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

Вы можете получить поисковый запрос, используя $request->get('search')['value'] а теперь напишите код, чтобы проверить, удовлетворяется ли ваше состояние, и отфильтруйте результаты в вашем контроллере или модели.Ниже приведен код для этого в контроллере.

return DataTables::eloquent($videos)
        ->filter(function ($query) use ($request) {
            if ($request->has('category') && ! is_null($request->get('category'))) {
                $query->where('video_category', $request->get('category'));
            }

            if ($request->has('language') && ! is_null($request->get('language')) ) {
                $query->where('video_language', $request->get('language'));
            }

            if ($request->has('search') && ! is_null($request->get('search')['value']) ) {
                $regex = $request->get('search')['value'];
                return $query->where('your_field', 'like', '%' . $regex . '%');
                });
            }
        })->toJson();
...