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

Hel*_*rld 1 php laravel eloquent laravel-5

首先,我在网上搜索了一个答案,却找不到令我惊讶的任何答案。也许我没有搜索正确的术语,如果是这种情况,请事先打扰。

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

protected $hidden = [
    'hasExpired', 'hasBeenTreated', 'reporterId'
];
Run Code Online (Sandbox Code Playgroud)

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

return response()->json([
         'latestReports' => $latestReports
       ]);
Run Code Online (Sandbox Code Playgroud)

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

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

$latestReports = $query->where('hasExpired', 0)
            ->orderBy('created_at', 'desc')
            ->get();
Run Code Online (Sandbox Code Playgroud)

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

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

任何帮助表示赞赏。

jed*_*ylo 5

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

更换

$query = DB::table('reports')->where('catId', 0);
Run Code Online (Sandbox Code Playgroud)

$query = Report::where('catId', 0);
Run Code Online (Sandbox Code Playgroud)