Laravel中无需循环获取多对多关联集合值并去掉数组括号引号的方法
实现方案
你可以直接调用Laravel集合内置的implode()方法完成需求,全程无需循环,仅需一行代码:
// 直接对关联返回的集合做拼接,分隔符可自定义 $hotel->services->pluck('name')->implode('、')
原理解释
- 你原有代码返回的是服务名组成的Laravel Collection对象,直接输出时会自动序列化为JSON数组格式,所以会携带方括号、引号等符号
implode()方法会将集合内的所有元素按你指定的分隔符拼接为纯字符串,上述示例用中文顿号作为分隔符时,你的示例输入会返回Free Wi-Fi、Free Parking,无任何多余符号。如果需要用英文逗号、空格等作为分隔符,仅需要替换implode()的参数即可,比如用implode(', ')即可得到Free Wi-Fi, Free Parking的效果。
高性能优化方案
如果不需要加载服务的其他字段,还可以直接在关联查询阶段完成拼接,减少IO开销,同样是一行代码:
// 直接在关联查询构造器上调用implode,无需加载完整服务模型 $hotel->services()->implode('name', '、')
内容的提问来源于stack exchange,提问作者lasshak
相关产品推荐
相关产品推荐

