【发布时间】:2017-09-04 12:07:54
【问题描述】:
情况
所以这只是发生在我身上。我有 3 个相互关联的模型。我的架构是这样的:
-- 机车车辆
- 身份证
- 姓名
- [...]
-- 用户
- 身份证
- 姓名
- [..]
-- 任务
- 身份证
- 说明
- 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);
}
用户.php
public function task()
{
return $this->morphMany(Task::class, 'projectleader');
}
任务.php
public function RollingStock()
{
return $this->belongsTo(RollingStock::class);
}
public function projectleader()
{
return $this->morphTo();
}
在我的用户模型中,我将“密码”和“记住令牌”设置为 $hidden,如下所示:
用户.php
protected $hidden = [
'password', 'remember_token',
];
问题
通过这个简短的介绍,我现在将带您解决我的问题。当我使用以下查询在我的 RollingStocksController 中获取项目负责人的所有任务时,结果也包括用户模型(作为项目负责人)中的“隐藏”字段。
$rollingStock = RollingStock::with('task.projectleader')->find($id); // ID 与我要获取的 RollingStock 的 ID 匹配)
结果
如果我死了并转储 (dd()) 对象有它的关系,但是如果我循环遍历对象,User model 中的“密码”和“记住令牌”字段在屏幕上是可见和可打印的。
有没有办法隐藏字段,即使模型(渴望)作为关系加载?
【问题讨论】:
-
可以使用 except 方法:laravel.com/docs/5.4/collections#method-except
标签: laravel eloquent laravel-5.4