rya*_*b92 1 php laravel tinker
只需在字段名称前添加 # 前缀即可
我正在使用 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',
];
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我获取在 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: "$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi",
#remember_token: "F87k6RPxgi",
created_at: "2021-08-31 11:19:47",
updated_at: "2021-08-31 11:19:47",
},
Run Code Online (Sandbox Code Playgroud)
这是因为仅当您将模型转换为数组或 JSON 时,这些字段才会隐藏。
从文档中:
有时您可能希望限制模型数组或 JSON 表示中包含的属性,例如密码。
有关此主题的完整文档可在此处找到: 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
Run Code Online (Sandbox Code Playgroud)