无法在 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]);
要动态生成参数,如果您有一组供应商 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);
由于某些奇怪的原因,参数在我的查询中不适用于 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]);
要动态生成参数,如果您有一组供应商 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);