如何在Laravel Eloquent中将ID数组转换为字符串数组返回
解决Laravel Eloquent查询返回字符串ID数组的问题
嘿,我来帮你搞定这个需求!要在Eloquent查询内部把数字ID数组转换成字符串数组,其实可以直接在数据库查询阶段就完成类型转换,不用等拿到结果再用PHP处理。这里有几种实用的方法:
方法1:使用selectRaw配合CAST函数
直接在关联查询里指定字段转换,然后再pluck:
public function toArray($request) { return [ 'speciality' => $this->specialities() ->selectRaw('CAST(speciality_id AS CHAR) as speciality_id') ->pluck('speciality_id') ]; }
这种方式会让数据库把speciality_id字段转换成字符串类型后再返回,pluck出来的自然就是字符串数组了。
方法2:在pluck中直接使用DB::raw
如果想更简洁,可以直接在pluck方法里用DB::raw来做类型转换:
use Illuminate\Support\Facades\DB; public function toArray($request) { return [ 'speciality' => $this->specialities() ->pluck(DB::raw('CAST(speciality_id AS CHAR)')) ]; }
记得要引入DB门面哦,这样就能直接在pluck里指定转换逻辑了。
方法3:用CONCAT函数实现转换(MySQL适用)
如果你用的是MySQL数据库,还可以用CONCAT函数把数字和空字符串拼接,自动转成字符串:
use Illuminate\Support\Facades\DB; public function toArray($request) { return [ 'speciality' => $this->specialities() ->pluck(DB::raw('CONCAT(speciality_id, "")')) ]; }
这个方法和CAST的效果是一样的,看你个人习惯选择就行。
以上几种方法都是在Eloquent查询过程中完成类型转换,完全符合你“在查询内处理”的要求,返回的结果就是["1", "3", "5", "7"]这样的字符串数组啦。
内容的提问来源于stack exchange,提问作者gileneusz
相关产品推荐
相关产品推荐

