Laravel 5.3:在JSON响应中返回隐藏字段

时间:2017-04-07 06:03:56

标签: php laravel laravel-5 eloquent

首先,我在网上搜索了一个答案,找不到任何令我惊讶的东西。也许我没有找到合适的条款,如果是这样,请提前原谅我。

所以我在模型中定义了一些隐藏的字段:

protected $hidden = [
    'hasExpired', 'hasBeenTreated', 'reporterId'
];

这就是我输出结果的方式:

return response()->json([
         'latestReports' => $latestReports
       ]);

$ latestReports变量在其他地方定义为:

$query = DB::table('reports')
            ->where('catId', 0) ;

$latestReports = $query->where('hasExpired', 0)
            ->orderBy('created_at', 'desc')
            ->get();

这些字段怎么可能仍然出现在我从服务器到客户端的响应中,最重要的是我应该纠正什么以防止它们出现。换句话说,如何强制执行隐藏数组?

请注意:对于其他一些模型(例如用户),强制执行隐藏数组,即隐藏字段不会出现在响应中。

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:5)

显示隐藏字段的原因是您使用 DB :: table()直接从数据库表中获取数据,而不是使用您的模型。在将Eloquent模型序列化为JSON时使用了 $ hidden 数组,并且您以这种方式绕过Eloquent层,因此查询无法知道某些列应该被隐藏。

替换

$query = DB::table('reports')->where('catId', 0);

$query = Report::where('catId', 0);