排除Laravel会从模型结果中追加值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排除Laravel会从模型结果中追加值相关的知识,希望对你有一定的参考价值。

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

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

例:

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

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

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

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

不确定哪个是最便宜的时间路线。

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

答案

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

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

以上是关于排除Laravel会从模型结果中追加值的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Eloquent ORM字段处理

如何在 Laravel 5.1 中追加结果

讨论:Laravel Eloquent vs DB 查询追加

从资源模板 Laravel 7 和 8 中排除字段

从模型性能计算中排除缺失值

如何从RegEx分组中“排除”空白区域?