【问题标题】:Excluding Laravel appends values from model results排除 Laravel 会附加模型结果中的值
【发布时间】:2016-01-29 02:07:59
【问题描述】:

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

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

例子:

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

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

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

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

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

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

【问题讨论】:

    标签: php laravel laravel-4 datatables laravel-datatables


    【解决方案1】:

    您可以调用集合对象中的每个函数,然后使用 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');
    

    【讨论】:

    • 不幸的是,在传递给yajra/laravel-datatables 包之前,我不能在结果上使用get(),该包通过AJAX 将其传递给jQuery DataTables 包。忘了说那个包了。否则这将是一个完美的解决方案!
    • 我认为你可以在 yajra/laravel-datatables 包中使用 remove_column('columnName') 方法。
    • 为了解决这个问题,我在我的Item 模型上公开了$appends,创建了变量$DT = Datatables::of($items);,然后在返回make() 之前使用了call_user_func_array([$DT, 'removeColumn'], $items->first()->appends);。如果传递数组,则必须使用 yajra/laravel-datatables-oracle v3 以这种方式调用。
    • 更正,不能那样做,否则会弄乱分页。必须为其创建静态方法,我已在解决方案中发布了该方法。 +1 你的回答帮助我找出完整的解决方案。
    【解决方案2】:

    为了解决这个问题,我将此方法添加到我的 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);
    

    【讨论】:

      猜你喜欢
      • 2019-10-30
      • 2014-10-31
      • 1970-01-01
      • 1970-01-01
      • 2017-06-24
      • 1970-01-01
      • 2017-09-13
      • 2019-05-27
      • 1970-01-01
      相关资源
      最近更新 更多