Laravel:为什么 Eloquent 显示隐藏字段?
Laravel: Why is Eloquent displaying hidden fields?
只需在字段名称前加上#前缀
我正在使用 Laravel Breeze,它默认将 password
和 remember_token
字段设置为隐藏。
class User extends Authenticatable
{
use HasFactory, Notifiable;
protected $fillable = [
'username',
'email',
'password',
];
protected $hidden = [
'password',
'remember_token',
];
protected $casts = [
'email_verified_at' => 'datetime',
];
}
但是,如果我在 Tinker 中获取一个 User 实例 运行 User::inRandomerOrder()->first()
,我仍然能够看到这些假定的隐藏字段。
App\Models\User {#4440
id: 14,
username: "verdie10",
email: "jerrold.ziemann@example.org",
email_verified_at: "2021-08-31 11:19:47",
#password: "yIXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi",
#remember_token: "F87k6RPxgi",
created_at: "2021-08-31 11:19:47",
updated_at: "2021-08-31 11:19:47",
},
那是因为这些字段仅在您将模型转换为数组或 JSON 时隐藏。
来自文档:
Sometimes you may wish to limit the attributes, such as passwords, that are included in your model's array or JSON representation.
有关此主题的完整文档可在此处获取:https://laravel.com/docs/8.x/eloquent-serialization#hiding-attributes-from-json
我们的目标是将它们从您的 API 回复中删除。
但是,当您在控制器、服务中使用模型时,您可能仍会使用它们……这就是您看到它们的原因。
您可以通过以下方式检查它是否有效:
$user = User::first();
$user->toArray(); // hidden attributes not included
$user->toJson(); // hidden attributes not included
Laravel 文档:
隐藏数组的属性或JSON转换
所以,如果你尝试
get()->toArray();
它们将被隐藏。
测试:
dd(User::find(1)->toArray());
dd(User::find(1));
##############
User::find(1)->exclude(['password']);
##############
User::find(1)->makeHidden('password');
使用 makeHidden()
方法获取用户
User::inRandomerOrder()->first()->makeHidden(['password'])
只需在字段名称前加上#前缀
我正在使用 Laravel Breeze,它默认将 password
和 remember_token
字段设置为隐藏。
class User extends Authenticatable
{
use HasFactory, Notifiable;
protected $fillable = [
'username',
'email',
'password',
];
protected $hidden = [
'password',
'remember_token',
];
protected $casts = [
'email_verified_at' => 'datetime',
];
}
但是,如果我在 Tinker 中获取一个 User 实例 运行 User::inRandomerOrder()->first()
,我仍然能够看到这些假定的隐藏字段。
App\Models\User {#4440
id: 14,
username: "verdie10",
email: "jerrold.ziemann@example.org",
email_verified_at: "2021-08-31 11:19:47",
#password: "yIXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi",
#remember_token: "F87k6RPxgi",
created_at: "2021-08-31 11:19:47",
updated_at: "2021-08-31 11:19:47",
},
那是因为这些字段仅在您将模型转换为数组或 JSON 时隐藏。
来自文档:
Sometimes you may wish to limit the attributes, such as passwords, that are included in your model's array or JSON representation.
有关此主题的完整文档可在此处获取:https://laravel.com/docs/8.x/eloquent-serialization#hiding-attributes-from-json
我们的目标是将它们从您的 API 回复中删除。
但是,当您在控制器、服务中使用模型时,您可能仍会使用它们……这就是您看到它们的原因。
您可以通过以下方式检查它是否有效:
$user = User::first();
$user->toArray(); // hidden attributes not included
$user->toJson(); // hidden attributes not included
Laravel 文档:
隐藏数组的属性或JSON转换
所以,如果你尝试
get()->toArray();
它们将被隐藏。
测试:
dd(User::find(1)->toArray());
dd(User::find(1));
##############
User::find(1)->exclude(['password']);
##############
User::find(1)->makeHidden('password');
使用 makeHidden()
方法获取用户
User::inRandomerOrder()->first()->makeHidden(['password'])