无法在 DB::select 中的 Laravel 中使用 IN 条件参数

Can’t Use Parameters for IN Condition in Laravel in DB::select

由于某些奇怪的原因,参数在我的查询中不适用于 In 条件。

如果我对参数进行硬编码,查询 return 的结果是:

DB::select("SELECT * FROM my_table WHERE vendor_id IN (19009, 19010)

这些不是 return 结果:

DB::select("SELECT * FROM my_table WHERE vendor_id IN (':vendor_ids')", [
  ':vendor_ids' => implode([
    19010,
    19009,
  ]),
]);

DB::select("SELECT * FROM my_table WHERE vendor_id IN (':vendor_ids')", [
  ':vendor_ids' => [
    19010,
    19009,
  ],
]);

DB::select("SELECT * FROM my_table WHERE vendor_id IN (':vendor_ids')", [
  ':vendor_ids' => '19009, 19010',
]);

Laravel 有一个非常好的 query builder

试试这个:

$resultCollection = DB::table('my_table')
    ->select('*')
    ->whereIn('vendor_id', [19009, 19010])
    ->get();

如果您真的想使用原始查询,请尝试 DB::raw

像这样:

$resultCollection = DB::table('my_table')
    ->whereRaw('vendor_id IN (?)', [19010,19009])
    ->get();

使用IN(:paramters)只会return一行。

需要像IN(:parameter1, parameter2)一样单独绑定参数。 因此,如果您执行以下操作,您应该会得到预期的结果

DB::select("SELECT * FROM my_table WHERE vendor_id IN (':vendor_id1, :vendor_id2',...)", 
    [':vendor_id1' => 1, ':vendor_id2' => 2]);

More details

要动态生成参数,如果您有一组供应商 ID 遍历它们并创建另一个关联数组

$vendors = [];
foreach ($vendorId as $id) {
    $vendors[':vendor' . $id] = $id;
}

然后

DB::select("SELECT * FROM my_table WHERE vendor_id IN (" . implode(array_keys($vendors), ',') . ")", 
    $vendors);