首先,我在网上搜索了一个答案,找不到任何令我惊讶的东西。也许我没有找到合适的条款,如果是这样,请提前原谅我。
所以我在模型中定义了一些隐藏的字段:
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();
这些字段怎么可能仍然出现在我从服务器到客户端的响应中,最重要的是我应该纠正什么以防止它们出现。换句话说,如何强制执行隐藏数组?
请注意:对于其他一些模型(例如用户),强制执行隐藏数组,即隐藏字段不会出现在响应中。
任何帮助表示感谢。
答案 0 :(得分:5)
显示隐藏字段的原因是您使用 DB :: table()直接从数据库表中获取数据,而不是使用您的模型。在将Eloquent模型序列化为JSON时使用了 $ hidden 数组,并且您以这种方式绕过Eloquent层,因此查询无法知道某些列应该被隐藏。
替换
$query = DB::table('reports')->where('catId', 0);
与
$query = Report::where('catId', 0);