如何在原始 sql WHERE IN [LUMEN/LARAVEL] 中绑定命名参数
Posted
技术标签:
【中文标题】如何在原始 sql WHERE IN [LUMEN/LARAVEL] 中绑定命名参数【英文标题】:How bind named parameter in raw sql WHERE IN [LUMEN/LARAVEL] 【发布时间】:2021-11-20 03:52:35 【问题描述】:Lumen 具有带 select 方法的 DB 外观
$results = DB::select('select * from users where id = :id', ['id' => 1]);
但这在 WHERE IN case 中不起作用。
DB::connection('db')->selectOne("many lines of sql WHERE my_id IN (:my_id) ", ["my_id" => $new_ids]);
当然,也可以使用查询生成器,
DB::connection()->table('users')->select()->whereIn(id, $new_ids)
但我想保存原始 SQL 以方便以后调试,因为我的 sql 过于全面,有很多连接。
【问题讨论】:
$new_ids
的值是多少?它应该是一个字符串,以逗号分隔。我真的认为如果使用得当,查询生成器更容易维护。并且会减少出现 SQL 错误的机会。
【参考方案1】:
所以我做了一些妥协。
我使用了查询生成器,但我可以将所有联接保存为原始格式。
恕我直言,我认为综合连接在原始格式中比在原始格式中更具可读性 使用匿名函数的查询生成器。
我的代码
DB::connection('super_db')->query()
->selectRaw(
"very long sql INNER JOIN AND LEFT JOIN ON and other stuff...
")
->whereIn('my_id', $new_ids)
->groupBy('some_column')
->get();
所以,在 WHERE 部分之前的 sql 我可以以原始格式编写,但在 QB 格式的部分之后。
但现在它可以正常工作,安全且引用。
【讨论】:
以上是关于如何在原始 sql WHERE IN [LUMEN/LARAVEL] 中绑定命名参数的主要内容,如果未能解决你的问题,请参考以下文章
Lumen 的 And Where 和 Where 条件如何处理?
SQL:如何在同一行显示 WHERE IN 和 WHERE NOT IN?
SQL:如何在带有“NOT IN”条件的“Where”子句中使用“and”和“or”