2

我在 Laravel 7 中使用 php 7.4 创建了全新的项目,并且在用户模型上我具有以下属性:

* The attributes that are mass assignable.
     *
     * @var array
     */
    protected array $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected array $hidden = [
        'password', 'remember_token',
    ];

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected array $casts = [
        'email_verified_at' => 'datetime',
    ];

在 Laravel Homestead 上一切正常,但是当我想在 UserSeeder 上使用 Laravel Forge 部署应用程序时,我收到了这条消息:

PHP Fatal error:  Type of App\User::$casts must not be defined (as in class Illuminate\Foundation\Auth\User)
4

1 回答 1

2

您收到此错误的原因是$casts父类中定义的属性未作为array属性键入,但它在您的模型中。

根据PHP RFC: Typed Properties 2.0

属性类型是不变的。这意味着在继承期间不允许更改(非私有)属性的类型(这包括添加或删除属性类型)。


为了解决这个问题,我建议简单地array从您继承的属性中删除。

我还建议阅读这篇文章以获取有关类型属性和其他 PHP 7.4 更改的更多信息。

于 2020-04-19T09:19:44.957 回答