Я работаю над проектом анализа данных. Я использую Laravel 5.6 и yajra / datatable (https://github.com/yajra/laravel-datatables) библиотека для разработки. Я сталкиваюсь с проблемами следующим образом:
Во-первых, я создал данные из построителя запросов:
$querybuilder = $mydb->getQuery($expression);
return Datatables::of($querybuilder)->make();
Однако функции orderBy () и take () библиотеки Datatable конфликтуют с моими функциями orderBy () и take () в моем $ querybuilder.
Например мой $querybuilder
создан из $query->table(..)->where(..)->orderBy(second_column)->take(5)
Потому что get()
функция $querybuilder
не вызываться заранее, чтобы после того, как я положил его в Datatables::of($querybuilder)->make()
запрос контролируется библиотекой Datatable, так что orderBy () и take () перезаписываются.
В соответствии с результатом, я думаю, он будет перезаписан следующим образом:
$querybuilder->orderBy(first_column)->take(10);
Кроме того, это также происходит с функциями поиска. Функция поиска ищется по всем записям таблицы, но не по первым 5 записям.
Мое решение в этом случае изменить Query Builder в Коллекция
Поэтому я использовал Datatables::of($querybuilder->get())->make()
вместо Datatables::of($querybuilder)->make()
И это хорошо сработало в этом случае
к несчастью, в случае, если я хочу получить все данные из базы данных. PHP будет недостаточно памяти потому что данные слишком велики, и я получаю все это как Коллекция прежде чем передать его в Datatable. Если я приведу таблицу данных Query Builder он может обрабатывать объем данных функцией paginate ().
Таким образом, есть ли способ решить обе эти проблемы?
Я действительно предпочитаю использовать Query Builder для Datatable, а не для Collection, потому что этот способ помогает мне экономить ресурс при получении больших данных, а не изменять ограничение памяти в конфигурации PHP. Однако я не знаю решения для ограничения области данных из моего исходного запроса после передачи его в Datatable. Пожалуйста, помогите мне, если вы знаете решение.
Заранее спасибо,
Задача ещё не решена.
Других решений пока нет …