laravel - Laravel 数据表 - 只返回请求的列,删除额外的模型字段
问题描述
我在网站上使用Laravel 数据表。
数据通过 AJAX 加载。在我的前端代码中,我选择表格需要的列:
var dataTable = $('#products-table').DataTable({
serverSide: true,
ajax: {
'url': '{!! route('myroute') !!}',
},
columns: [
{data: 'brand_model', orderable: false},
{data: 'status', className: 'dt-body-center', orderable: false},
{data: 'sale_price', className: 'dt-body-right'},
{data: 'image_url', orderable: false, className: 'table-image'},
{data: 'actions', orderable: false, className: 'table-actions'}
],
order: [[1, "desc"]]
});
在后端,我目前正在构建响应,如下所示:
$products = $user->products(); // Eloquent relationship
return DataTables::of($products)
->editColumn('status', function ($product) { ... })
->addColumn('actions', function ($product) { ... })
...
->make(true);
一切都正确显示,但我分析了 ajax 响应,我注意到每个列甚至user
每个产品的关系都被返回。基本上,对于表中的每一行,我都会返回一大堆不应该在前端可用的无用数据。
有没有办法强制数据表构建器只包含这些字段而不包含其他所有内容?
我唯一能做的就是在 eloquent 查询中只选择所需的字段:
$products = $user->products()->select(['status', 'image_url', ... ]);
但是这个解决方案是不可行的,因为我需要大部分字段和关系来构建额外的列(即actions
)。在构建所需的列后,应过滤该字段。
虽然自动解决方案是完美的,但我也会考虑手动解决方案(我必须手动指定要在响应中包含哪些字段)
解决方案
您可以使用包的默认方法only
:
return Datatables::of($products)->->only([
'col1',
'col2'
])
只有此方法中的指定列将在响应中发送。
推荐阅读
- virtual-machine - 用于安装 windows 和 ubuntu 的磁盘分区
- powershell - 使用 Powershell 或命令行从 Web 下载文件
- mysql - MySQL - 修复 URL 列中的一致性问题
- sql - 将 Year+WeekOfYear+DayOfWeek 转换为日期
- c++ - C++17 中函数指针的求值顺序
- asp.net - 调试时替换 web.config 设置
- javascript - cancelScheduledValues(x) 后跟 setValueCurveAtTime(x) 抛出错误
- python - 如何使用 Impala 和 Python 代码同时运行查询?
- python-3.x - Selenium - 使用 URL 登录失败
- r - 我怎样才能使用外部功能?