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_id2019-100 and 2018-100 的数据

它应该列出除了这两个company_id2019-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 数组匹配

PHP内爆爆炸第一个和最后一个数组值

内爆数组值?

将数组内爆为来自 mysql 查询的逗号分隔字符串

如何在没有 foreach 的情况下在 PHP 中使用键和值来内爆数组

用键内爆关联数组的最快方法