You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 8中Model的$fillable属性报类型不可定义错误如何解决?

错误原因

该错误是PHP类属性继承规则和Laravel版本特性共同导致的:

  • Laravel 8.x版本的Illuminate\Database\Eloquent\Model父类中,$fillable属性未声明array类型
  • PHP 7.4及以上版本支持类属性类型声明,但要求子类重写父类属性时,若父类未指定属性类型,子类不可以额外添加类型声明。你的Setting模型给$fillable加了array类型声明,违反了该继承规则,因此触发致命错误。

可行修复方案

方案1:移除$fillable的类型声明(最便捷,兼容当前环境)

直接删除$fillable前的array类型标识即可,修改后代码如下:

<?php
namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Setting extends Model
{
    use HasFactory;

    protected $fillable = [
        'key',
        'value',
    ];

    protected $casts = [
        'value' => 'array',
    ];
}

方案2:升级Laravel版本

Laravel 9及以上版本已经对父类Model的$fillable属性补充了array类型声明,如果你可以升级运行环境(Laravel 9要求PHP 8.0及以上版本),升级到对应Laravel版本后原有带类型的代码可以正常运行。

方案3:使用$guarded替代$fillable

如果你不需要限制批量赋值的字段,可以直接用$guarded属性声明不允许批量赋值的字段为空,也可以解决问题,示例:

// 替换原有$fillable段为以下代码
protected $guarded = [];

注意:该方案会允许所有字段的批量赋值,使用前请确认没有注入风险,做好数据校验。

内容的提问来源于stack exchange,提问作者Chayan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 04:15:02