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

无数据库记录时,如何获取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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:48:26