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
相关产品推荐
相关产品推荐

