首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >排除Laravel会从模型结果中附加值

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

Stack Overflow用户
提问于 2015-10-29 11:52:53
回答 2查看 2.8K关注 0票数 3

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

这通常很方便,除了在这种情况下,我只需要获取我输入到select()中的字段,因为DataTables只需要我发送给它的字段。

示例:

代码语言:javascript
复制
Item::select(['image', 'name', 'color']);

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

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

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

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

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

EN

回答 2

Stack Overflow用户

发布于 2015-10-29 14:19:15

您可以调用集合对象中的每个函数,然后使用setHidden方法排除不需要的字段,如下所示

代码语言:javascript
复制
$item= Item::select(['image', 'name', 'color'])->get()->each(function($row){
                    $row->setHidden(['appendedField1', 'appendedField2']);
                });

对于yajra/laravel-datatables,您可以使用如下内容

代码语言:javascript
复制
$item= Item::select(['image', 'name', 'color']);
return Datatables::of($item)->remove_column('appendedField1');
票数 3
EN

Stack Overflow用户

发布于 2015-10-30 11:52:24

为了解决这个问题,我将这个方法添加到我的Item模型中:

代码语言:javascript
复制
public static function getAppends()
{
    $vars = get_class_vars(__CLASS__);

    return $vars['appends'];
}

然后在控制器中使用以下代码:

代码语言:javascript
复制
$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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33405661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档