Laravel查询转换:将SELECT查询改写为批量UPDATE更新语句
Laravel批量更新tour_id字段(移除数字2)
直接将原SELECT中的正则替换逻辑迁移到UPDATE语句即可,以下是两种实现方式:
方式一:通过模型执行批量更新
Collections::update([ 'tour_id' => DB::raw("REGEXP_REPLACE(tour_id,'(,2|2,|2)','')") ]);
方式二:通过DB门面执行批量更新
DB::table('collections')->update([ 'tour_id' => DB::raw("REGEXP_REPLACE(tour_id,'(,2|2,|2)','')") ]);
额外注意事项
- 替换后可能出现首尾多余逗号的情况(例如原字段值为
,2,3,替换后变为,3),如果需要清理这类无效逗号,可以嵌套TRIM函数处理:
Collections::update([ 'tour_id' => DB::raw("TRIM(BOTH ',' FROM REGEXP_REPLACE(tour_id,'(,2|2,|2)',''))") ]);
- 执行批量更新前,务必先用原SELECT语句验证替换结果,确认符合预期后再执行更新,避免数据错误。
- 该写法依赖数据库的
REGEXP_REPLACE函数,MySQL需8.0及以上版本支持;若使用低版本MySQL,需要改用其他字符串替换方案。
内容的提问来源于stack exchange,提问作者Pranay Kachhadiya
相关产品推荐
相关产品推荐

