Laravel 查询:Php 内爆数组字符串值 [重复]
Posted
技术标签:
【中文标题】Laravel 查询:Php 内爆数组字符串值 [重复]【英文标题】:Laravel Query: Php implode array string values [duplicate] 【发布时间】:2020-02-23 11:41:48 【问题描述】:目前我有这个变量
$arrays = implode(", ", $request->pmChck);
如果我尝试返回这个变量。我会得到这种输出
2019-100,2018-100
如您所见,值用逗号分隔
现在在我的 laravel 查询中,我试图获取除上面这两个 company_id
之外的员工的所有记录。
$pm_selected = DB::connection('mysql')->select("SELECT * FROM view_employee_info WHERE company_id NOT IN('".$arrays."')");
查询不起作用,它显示了所有数据以及company_id
的2019-100 and 2018-100
的数据
它应该列出除了这两个company_id
2019-100 and 2018-100
之外的所有数据
我的格式或语法有什么问题吗?
【问题讨论】:
当您将逗号分隔的字符串用引号括起来时,您只会传递一个值。NOT IN ()
正在处理一个条目,但您的意思是输入两个条目。您需要引用包装列表中的每个条目。我会找到一个副本来结束。
【参考方案1】:
假设$request->pmChck
是您要排除的公司数组,查询将是:
DB::table(..)->select(..)->whereNotIn('company_id', $request->pmChck)->get();
【讨论】:
【参考方案2】:你的内爆数组看起来像
2019-100, 2018-100
查询也是:
SELECT * FROM view_employee_info WHERE company_id NOT IN('2019-100, 2018-100')
尝试像这样内爆:
implode("', '", $arr)
查询就OK了:
SELECT * FROM view_employee_info WHERE company_id NOT IN('2019-100', '2018-100')
【讨论】:
我根据您的回答绑定了这个implode("', '", $arr)
,它工作正常。谢谢!
很高兴为您提供帮助^_^【参考方案3】:
您查询中的问题是 IN 部分中的单引号。
如果你改变了
$pm_selected = DB::connection('mysql')->select("SELECT * FROM view_employee_info WHERE company_id NOT IN('".$arrays."')");
到
$pm_selected = DB::connection('mysql')->select("SELECT * FROM view_employee_info WHERE company_id NOT IN(".$arrays.")");
它应该可以按您的预期工作。它目前不起作用,因为您的查询将如下所示:
SELECT * FROM table WHERE company_id IN ('123, 234')
它将您的输入值视为单个值,123, 234
【讨论】:
以上是关于Laravel 查询:Php 内爆数组字符串值 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
将 MySQL 内爆数组中的项目与查询中的 PHP 数组匹配