Laravel 9中implode与whereIn使用问题:如何为ID添加单引号
解决Laravel查询构造器拼接带单引号ID字符串的问题
方法1:利用集合的map+implode(最直观)
查询出ID集合后,通过map给每个ID包裹单引号,再用implode拼接:
$quotedIds = DB::table('orders_grid') ->where('stato_ordine', 1) ->pluck('id') ->map(fn($id) => "'{$id}'") ->implode(',');
执行后$quotedIds会得到类似'2','3','4'的字符串,直接满足Oracle字符串类型字段的whereIn需求。
方法2:数据库层面拼接单引号(减少PHP端处理)
借助Oracle的字符串拼接语法,直接在查询时生成带单引号的ID,再提取拼接:
$quotedIds = DB::table('orders_grid') ->where('stato_ordine', 1) ->selectRaw("'''' || id || '''' as quoted_id") // Oracle中转义单引号需用四个连续单引号 ->pluck('quoted_id') ->implode(',');
更优方案:避免手动拼接,直接用子查询(安全且高效)
如果后续的Oracle查询和当前查询使用同一数据库连接,完全不需要手动拼接字符串,直接用子查询作为whereIn的条件,既规避SQL注入风险,又简化代码:
$result = DB::table('your_oracle_table') ->whereIn('oracle_id', function ($query) { $query->select('id') ->from('orders_grid') ->where('stato_ordine', 1); }) ->get();
这种方式Laravel会自动处理类型匹配和SQL语法,无需手动处理单引号问题。
内容的提问来源于stack exchange,提问作者user18182496
相关产品推荐
相关产品推荐

