当模型是一个关系时,模型中的隐藏字段出现
Hidden fields from model appear when model is a relation
情况
所以这恰好发生在我身上。我有 3 个相互关联的模型。我的架构是这样的:
-- 机车车辆
- id
- 名字
- [...]
-- 用户
- id
- 名字
- [..]
-- 任务
- id
- 描述
- projectleader_id // 对应于 App\User 或 App\Group
- projectleader_type // 对应于 App\User 或 App\Group
- rolling_stock_id
- [...]
我的模特彼此有关系:
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,只是一个转储变量。
情况
所以这恰好发生在我身上。我有 3 个相互关联的模型。我的架构是这样的:
-- 机车车辆
- id
- 名字
- [...]
-- 用户
- id
- 名字
- [..]
-- 任务
- id
- 描述
- projectleader_id // 对应于 App\User 或 App\Group
- projectleader_type // 对应于 App\User 或 App\Group
- rolling_stock_id
- [...]
我的模特彼此有关系:
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,只是一个转储变量。