У меня есть этот код метод в одном из классов клиентов laravel как расширение пакета laraship.
Если вы знакомы с laraship (https://www.laraship.com/) Я использую там пакет, и в этом пакете используется datatable (https://yajrabox.com/docs/laravel-datatables/master) для отображения данных в представлении.
Здесь метод в классе dataTable.
/**
* Get query source of dataTable.
* @param Subscription $model
* @return \Illuminate\Database\Eloquent\Builder|static
*/
public function query(Shipment $model)
{
$model = $model->with([
'fulfillment.subscription.user',
'fulfillment.subscription.plan.product',
'fulfillment.invoice.user',
'fulfillment.charge',
'shipment_batch',
]);
$fulfillment = $this->request->route('fulfillment');
if (!empty($this->search_val)) {
$_search = ltrim($this->search_val, '0');
$model = $model->where(function($query) use ($_search) {
$query
->orWhere("id", 'like', "%{$_search}%")
->orWhere('fulfillment_id', 'like', "%{$_search}%")
->orWhere('tracking_number', 'like', "%{$_search}%");
})->orWhereHas('fulfillment.subscription.user', function ($query) use ($_search) {
$query->orWhere('name', 'like', "%{$_search}%");
$query->orWhere('email', 'like', "%{$_search}%");
});
}
$model = $model->whereHas('fulfillment.subscription', function ($q) {
$q->whereNotNull('id');
});
if (! is_null($this->batchId)) {
$model = $model->where('shipment_batch_id', $this->batchId);
}
return $model->select('shipments.*')->newQuery();
}
Что делает этот метод, так это то, что он возвращает результат поиска по заданному ключевому слову. Скажите имя, идентификатор, адрес электронной почты и т. Д.
Он работает локально, но проблема возникает во время его развертывания на действующем сайте с данными 20, 127
, которые включают данные из связанных таблиц.
На стороне клиента они сталкиваются с предупреждением с сообщением, как описано здесь
https://datatables.net/manual/tech-notes/7.
В инструменте dev я вижу, что он возвращает статус 504.
Есть ли способ оптимизировать приведенный выше код, чтобы он мог обрабатывать такие огромные данные?
или
Требуется ли оптимизация проблемы или это ошибка сервера?