Есть ли способ оптимизировать код для обработки таких огромных данных? - PullRequest
0 голосов
/ 12 января 2019

У меня есть этот код метод в одном из классов клиентов 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.

Есть ли способ оптимизировать приведенный выше код, чтобы он мог обрабатывать такие огромные данные?

или

Требуется ли оптимизация проблемы или это ошибка сервера?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...