You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 18:15:45