Laravel 数据表 - 只有 return 请求的列,删除了额外的模型字段
Laravel datatables - only return the requested columns, removing the additional model fields
我正在网站上使用 Laravel datatables。
数据通过AJAX加载。在我的前端代码中,我 select table 需要哪些列:
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
关系都是 return编辑。基本上,对于 table 中的每一行,我 return 一大堆 不应该 在前端可用的无用数据。
有没有办法强制数据table 构建器只包含这些字段而不包含其他所有字段?
我唯一能做的就是 select eloquent 查询中的所需字段:
$products = $user->products()->select(['status', 'image_url', ... ]);
但是这个解决方案不可行,因为我需要大部分字段和关系来构建额外的列(即 actions
)。在 构建所需的列后,应过滤该字段。。
虽然自动解决方案是完美的,但我也会考虑手动解决方案(我必须手动指定要包含在响应中的字段)
您可以使用包的默认方法only
:
return Datatables::of($products)->->only([
'col1',
'col2'
])
响应中只会发送此方法中指定的列。
我正在网站上使用 Laravel datatables。
数据通过AJAX加载。在我的前端代码中,我 select table 需要哪些列:
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
关系都是 return编辑。基本上,对于 table 中的每一行,我 return 一大堆 不应该 在前端可用的无用数据。
有没有办法强制数据table 构建器只包含这些字段而不包含其他所有字段?
我唯一能做的就是 select eloquent 查询中的所需字段:
$products = $user->products()->select(['status', 'image_url', ... ]);
但是这个解决方案不可行,因为我需要大部分字段和关系来构建额外的列(即 actions
)。在 构建所需的列后,应过滤该字段。。
虽然自动解决方案是完美的,但我也会考虑手动解决方案(我必须手动指定要包含在响应中的字段)
您可以使用包的默认方法only
:
return Datatables::of($products)->->only([
'col1',
'col2'
])
响应中只会发送此方法中指定的列。