我有此代码在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。
是否有一种方法可以优化上面的代码,使其能够处理如此庞大的数据?
或
问题是否需要优化,或者这是服务器故障?