有没有一种方法可以优化代码以处理如此大的数据?

时间:2019-01-12 16:29:45

标签: datatables laravel-5.5

我有此代码在laravel客户类之一中作为扩展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();
}

此方法的作用是返回给定关键字的搜索结果。说出姓名,ID,电子邮件等。

它在本地工作,但是问题在于将其部署到实时站点中时,数据20, 127包含相关表中的数据。

在客户端,他们遇到警报并显示消息,如下所述 https://datatables.net/manual/tech-notes/7

在开发工具上,我看到它返回状态504。

是否有一种方法可以优化上面的代码,使其能够处理如此庞大的数据?

问题是否需要优化,或者这是服务器故障?

0 个答案:

没有答案