Laravel Eloquent调用load()后如何获取返回指定列数据
Laravel Eloquent 调用load()后仅返回指定列实现方案
针对你需要在Provinsi模型调用load()后仅返回id、kd_prop_id字段的需求,提供两种可直接落地的实现方案:
方案1:控制器端临时设置模型输出白名单
Eloquent模型提供了setVisible()方法,可直接指定当前实例允许序列化输出的字段白名单,修改控制器代码即可生效:
public function show(Provinsi $provinsi) { abort_if(Gate::denies('provinsi_show'), Response::HTTP_FORBIDDEN, '403 Forbidden'); return new ProvinsiResource($provinsi->load([])->setVisible(['id', 'kd_prop_id'])); }
该方式无需修改其他文件,仅对当前控制器逻辑中的模型实例生效,不在白名单内的字段会在序列化时自动过滤。
方案2:API资源层固定返回结构(推荐)
Laravel的JsonResource设计初衷就是统一管控接口输出结构,在资源层定义返回字段是更规范的实现,不会影响模型在其他业务场景的字段使用。
找到app/Http/Resources/ProvinsiResource.php文件,修改toArray方法:
public function toArray($request) { return [ 'id' => $this->id, 'kd_prop_id' => $this->kd_prop_id, ]; }
控制器代码无需额外调整,保持原有写法即可,接口会自动按照资源类定义的结构返回数据。
补充说明
如果后续你需要在load()中加载关联关系并指定关联返回字段,必须在字段列表中包含关联依赖的外键,否则关联数据会加载失败。示例写法:
// 加载kabupaten关联时,必须带上外键provinsi_id $provinsi->load(['kabupaten:id,provinsi_id,nama_kab']);
内容的提问来源于stack exchange,提问作者RickyS
相关产品推荐
相关产品推荐

