当模型是一个关系时,模型中的隐藏字段出现

Hidden fields from model appear when model is a relation

情况

所以这恰好发生在我身上。我有 3 个相互关联的模型。我的架构是这样的:

-- 机车车辆

-- 用户

-- 任务

我的模特彼此有关系:

RollingStock.php

public function task()
{
return $this->hasMany(Task::class);
}

User.php

public function task()
{
return $this->morphMany(Task::class, 'projectleader');
}

Task.php

public function RollingStock()
{
return $this->belongsTo(RollingStock::class);
}

public function projectleader()
{
return $this->morphTo();
}

在我的用户模型中,我将 'password' 和 'remember_token' 设置为 $hidden,如下所示:

User.php

protected $hidden = [
    'password', 'remember_token',
];

问题

通过这个小介绍,我现在将带您解决我的问题。当我使用以下查询在我的 RollingStocksController 中获取项目负责人的所有任务时,结果也包括用户模型(作为项目负责人)中的 'hidden' 字段。

$rollingStock = RollingStock::with('task.projectleader')->find($id); // ID matches the ID of the RollingStock I'm trying to fetch)

结果

如果我死了并转储 (dd()) 对象有它的关系,但是 User model 中的字段 'password' 和 'remember_token' 是可见的并且可以打印到如果我循环遍历对象,屏幕。

有没有办法隐藏字段,即使模型是(急切地)作为关系加载的?

$hidden 仅在结果返回为 JSON 时隐藏字段。很容易忘记,但是文档部分的标题是 "Hiding Attributes From JSON".

在您的控制器中,尝试:

return $rollingStock;

Laravel 会将其转换为 JSON,您的隐藏字段将不会显示。将其更改为:

dd($rollingStock);

并且它们 出现,因为结果不是 JSON,只是一个转储变量。