所以这发生在我身上。我有3个与彼此有关系的模型。我的架构是这样的:
- RollingStocks
- 用户
- 任务
我的模特彼此有关系:
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中使用以下查询获取项目负责人的所有任务时,结果也包括用户模型中的“隐藏”字段(作为项目负责人)。
$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'是可变的,并且如果我循环可以打印到屏幕上物体。
有没有办法隐藏字段,即使模型是(急切地)加载为关系?
答案 0 :(得分:2)
$hidden
仅在结果以JSON格式返回时隐藏字段。这很容易忘记,但文档的部分标题为"Hiding Attributes From JSON"。
在您的控制器中,尝试:
return $rollingStock;
Laravel会将其转换为JSON,您的隐藏字段将不会显示。将其更改为:
dd($rollingStock);
并且将 ,因为结果不是JSON,只是一个转储变量。