Laravel可以选择为每个模型添加$appends
数组,通过为每个模型添加访问器,使其他值自动化,就像它们是数据库属性一样。
这通常非常方便,除非在这种情况下我只需要获取我放入select()
的字段,因为DataTables只期待我发送给它的内容。
示例:
Item::select(['image', 'name', 'color']);
将返回属性中color
之后的附加字段。
如何在返回结果时强制排除附加值?
或者,我如何让DataTables忽略某些属性?
不确定哪条路由时间最短。
目前使用yajra/laravel-datatables
包将数据发送到jQuery DataTables AJAX请求。
答案 0 :(得分:3)
您可以调用集合对象中的每个函数,然后使用setHidden方法排除不需要的字段,如
$item= Item::select(['image', 'name', 'color'])->get()->each(function($row){
$row->setHidden(['appendedField1', 'appendedField2']);
});
对于yajra / laravel-datatables,您可以使用类似
的内容$item= Item::select(['image', 'name', 'color']);
return Datatables::of($item)->remove_column('appendedField1');
答案 1 :(得分:1)
为了解决这个问题,我将此方法添加到我的Item
模型中:
public static function getAppends()
{
$vars = get_class_vars(__CLASS__);
return $vars['appends'];
}
然后在控制器中使用以下代码:
$items = Item::select(['image', 'name', 'color']);
$DT = Datatables::of($items);
call_user_func_array([$DT, 'removeColumn'], Item::getAppends()); // Has to be called this way with yajra/laravel-datatables-oracle v3.* if passing an array.
return $DT->make(true);