【问题标题】:Laravel 5.3 : hidden fields are returned in JSON responseLaravel 5.3:隐藏字段在 JSON 响应中返回
【发布时间】:2017-04-07 06:03:56
【问题描述】:

首先,我在网上搜索了答案,但找不到任何令我惊讶的答案。可能我没有搜索到正确的条款,如果是这种情况,请提前原谅。

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

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();

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

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

任何帮助表示赞赏。

【问题讨论】:

  • 如何创建 $query 对象?
  • 嗨 Jedrzej.Kurylo,请查看我的编辑 ;-)

标签: php laravel laravel-5 eloquent


【解决方案1】:

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

替换

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

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

【讨论】:

  • 有道理!非常感谢 Jedrzej.Kurylo!
猜你喜欢
  • 2013-11-11
  • 2011-03-27
  • 1970-01-01
  • 2017-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-11
相关资源
最近更新 更多