【问题标题】:Laravel: Why is Eloquent displaying hidden fields?Laravel:为什么 Eloquent 显示隐藏字段?
【发布时间】:2021-08-31 19:55:20
【问题描述】:

只需在字段名称前加上 # 前缀

我正在使用 Laravel Breeze,它默认将 passwordremember_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::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",
},

【问题讨论】:

  • 使用->toArray()

标签: php laravel tinker


【解决方案1】:

这是因为这些字段仅在您将模型转换为数组或 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

【讨论】:

    【解决方案2】:

    Laravel 文档:

    在数组或 JSON 转换中隐藏属性

    所以,如果你尝试

    get()->toArray();
    

    它们将被隐藏。

    测试:

    dd(User::find(1)->toArray());
    dd(User::find(1));
    

    ##############

    User::find(1)->exclude(['password']);
    

    ##############

    User::find(1)->makeHidden('password');
    

    【讨论】:

      【解决方案3】:

      使用makeHidden()方法获取用户

      User::inRandomerOrder()->first()->makeHidden(['password'])

      【讨论】:

        猜你喜欢
        • 2015-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-22
        • 2019-05-19
        • 2011-11-02
        • 2015-11-12
        • 1970-01-01
        相关资源
        最近更新 更多