无数据库记录时,如何获取Laravel模型的所有属性名?
嘿,这个问题我之前也碰到过!你用getAttributes()得不到想要的结果太正常了——刚new出来的空模型实例还没绑定任何数据,getAttributes()自然返回空数组啦。给你几个靠谱的解决办法:
解决方法
1. 直接查询数据库表字段(最准确通用)
这个方法完全不依赖模型的代码定义,直接从数据库获取对应表的所有字段名,不管表里有没有记录都能生效。需要用到Laravel的Schema门面:
use Illuminate\Support\Facades\Schema; $class = 'App\Company'; $modelInstance = new $class; // 获取模型对应的数据库表名,再查询字段列表 return Schema::getColumnListing($modelInstance->getTable());
返回的结果就是你想要的格式:['name', 'address', 'email_address'](数组索引默认从0开始)。
2. 利用模型的getFillable()(依赖$fillable配置)
如果你的App\Company模型里明确设置了$fillable属性(用来指定允许批量赋值的字段),那可以直接调用这个方法快速获取:
$class = 'App\Company'; return (new $class)->getFillable();
⚠️ 注意:如果你的模型用的是$guarded = [](允许所有字段批量赋值),那getFillable()会返回空数组,这个方法就不适用了。
3. 从$casts获取类型转换字段(仅特定场景)
如果你的模型里定义了$casts属性(用来做字段类型转换),想获取这些被转换的字段,可以用:
$class = 'App\Company'; return array_keys((new $class)->getCasts());
不过这个只能拿到设置了类型转换的字段,不是全部属性,所以只适合你只需要这类字段的场景。
内容的提问来源于stack exchange,提问作者Sam Driver
相关产品推荐
相关产品推荐

