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

Laravel中Resource调用子Resource返回数组而非单个数值的解决办法

如何让Laravel Resource返回单个数值而非数组?

嘿,我瞅了下你的代码,问题根源很明确:你直接把DimensionFormatResource的实例赋值给了height字段,但Laravel的Resource类本身设计就是要返回结构化的数组数据,所以它会自动把你的格式化结果包裹成数组,这就是为啥你得到[47.2]而不是单个数值。

给你两个简单的解决办法,选哪个看你需求:

方法一:直接调用Resource的resolve方法

如果你想保留DimensionFormatResource这个类,那可以在主Resource里调用它的resolve()方法——这个方法会跳过Resource的数组包装逻辑,直接返回你计算后的单个值:

public function toArray($request) {
    return [
        'height' => (new DimensionFormatResource($this->height))->resolve($request),
    ];
}

方法二:简化逻辑,不用Resource类

说实话,你的DimensionFormatResource只是做个简单的除以10的操作,用Resource类有点大材小用了。更轻便的方式是把这个逻辑改成模型的访问器,或者写个简单的工具函数:

模型访问器方案(推荐)

在你的模型里添加这个访问器,自动处理height的格式化:

public function getHeightAttribute($originalValue) {
    return $originalValue / 10;
}

然后主Resource直接用处理后的值就行:

public function toArray($request) {
    return [
        'height' => $this->height,
    ];
}

工具类方案

如果需要在多个地方复用这个格式化逻辑,可以写个普通的工具类:

class DimensionFormatter {
    public static function format($value) {
        return $value / 10;
    }
}

主Resource里调用:

public function toArray($request) {
    return [
        'height' => DimensionFormatter::format($this->height),
    ];
}

不管用哪种方法,最终都能让API返回你想要的"height": 47.2格式。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 05:32:47