laravel - 不能在 DB::select 的 Laravel 中为 IN 条件使用参数
问题描述
出于某种奇怪的原因,在我的查询中,这些参数不适用于 In 条件。
如果我对参数进行硬编码,则查询将返回结果:
DB::select("SELECT * FROM my_table WHERE vendor_id IN (19009, 19010)
这些不返回结果:
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',
]);
解决方案
使用IN(:paramters)
只会返回一行。
您需要单独绑定参数,例如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);
推荐阅读
- sql - 在 Oracle 表中运行多个插入,如何在每次插入后提交并在最后一个插入点重新启动存储过程?
- jenkins - 如何在 Jenkins 中使用 ssh Api Key
- c# - C# ref 返回值和可移动变量
- php - 类似 SAAS 的 Firebase 身份验证
- python - 从 X 射线图像中检测和分割感兴趣区域
- android - react-native 在底部标签导航中隐藏屏幕的特定标签
- python - 我可以访问 fatimatestpro.pythonanywhere.com 但不能访问 fatimatestpro.pythonanywhere.com/help/
- java - 为什么我使用 Spring Boot 获得“需要 NOAUTH 身份验证”?
- reactjs - React-router-dom 重定向但不渲染
- php - 如何在 Magento 2 的订单中获取每个产品的总行数?