3

Laravel 可以选择为每个模型添加一个$appends数组,通过为每个模型添加访问器,使附加值自动可用,就好像它们是数据库属性一样。

这通常非常方便,但在这种情况下,我只需要获取我输入的字段,select()因为 DataTables 只期待我发送给它的内容。

例子:

Item::select(['image', 'name', 'color']);

color将在属性之后返回附加字段。

返回结果时如何强制排除附加值?

或者,如何让 DataTables 忽略某些属性?

不确定哪个是时间成本最低的路线。

目前使用yajra/laravel-datatables包向 jQuery DataTables AJAX 请求发送数据。

4

2 回答 2

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');
于 2015-10-29T06:19:14.507 回答
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);
于 2015-10-30T03:52:23.987 回答