首页 > 解决方案 > Laravel:在数千行上使用“pluck”会导致 500 错误

问题描述

无法弄清楚为什么会这样。不幸的是,Laravel 吐出的只是 Chromes 标准 500 错误页面不起作用。

我有一个前端用户可以搜索合同的表格。我有成千上万行。该列表加载(不带过滤器)大约 22,000 多行,按粗略分页。我正在使用一个名为 DataTables 的插件来制作表格。当我将响应与表一起发送回前端时,我还想从合约中提取所有 id 并将其与 DataTable 数据一起发送,您可以使用 DataTables->with()选项来执行此操作。

前任:

return DataTable::eloquent($contracts)
->with(['all_ids' => $contracts->get()->pluck('id')])

问题是,500 错误不断发生在新列表中。但是,如果我要将列表过滤到大约 500 行左右,那么所有 500 个采摘 id 的响应都没有问题。

似乎 500 错误源于 22,000 被采摘。不幸的是,DataTables 不会发回列表中的所有 id,只发回分页(当前视图)的 id。这是我在整个结果集中获取所有可能的 id 的工作,但这会引起一些头痛。

关于如何让它表现更好的任何想法?

标签: phplaravel

解决方案


尝试:

return DataTable::eloquent($contracts)
    ->with(['all_ids' => $contracts->get('id')]);

get()接受列名列表,该列表将包含在select查询的一部分中。如果这还不够有效,那么检查是否DataTable有一些 API 来分块/分页来获取所有这些 ID。


推荐阅读