Laravel中如何返回Integer类型值而非JSON结构结果
问题描述
开发时查询得到的价格数据结构为{price:100},需要移除外层键名结构,直接输出整数类型的100。当前实现代码如下:
function each() { $Offer_price = Offer::select('price')->get(); foreach ($Offer_price as $Price) { return $Price; // 期望输出100,而非{price:100}结构 } }
当前代码遍历返回$Price时,得到的是带字段键名的对象/JSON结构{price:100},需要返回100对应的Integer类型纯值。
问题原因
- 调用
get()获取到的是Eloquent模型实例组成的集合,遍历得到的$Price是模型对象,直接返回对象会被序列化为带字段名的键值结构。 - 现有代码在循环内直接执行
return,只会返回集合中第一条数据,不会遍历全部结果。
解决方案
根据实际业务场景选择对应写法即可:
仅需获取第一条数据的price值
不需要手动写循环,直接调用查询构造器的value()方法,会自动取第一条匹配数据,直接返回对应字段的纯值:
function each() { // 直接返回第一条数据的price字段整数值 return Offer::value('price'); }
需要获取所有数据的price值集合
用pluck()方法可直接提取指定字段的所有值,返回纯值构成的数组,不需要手动循环:
function each() { // 返回格式示例:[100, 200, 300],为所有价格的纯整数值集合 return Offer::pluck('price')->all(); }
必须保留foreach循环逻辑
在循环内直接访问模型实例的属性即可拿到纯值,如果需要返回所有结果,要先把值存入数组,等循环结束后再返回,不要在循环内直接return:
function each() { $Offer_price = Offer::select('price')->get(); $priceList = []; foreach ($Offer_price as $Price) { // 访问模型的price属性取值,(int)强制转换为整数类型 $priceList[] = (int)$Price->price; } return $priceList; // 仅需第一条值的话,直接写 return (int)$Offer_price->first()->price; 即可 }
注意:如果要求严格返回Integer类型,取值时可以用(int)做强制类型转换,避免返回字符串类型的数字。
内容的提问来源于stack exchange,提问作者user19465999
相关产品推荐
相关产品推荐

