【问题标题】:Laravel Query: Php implode array string values [duplicate]Laravel 查询:Php 内爆数组字符串值 [重复]
【发布时间】: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 () 正在处理一个条目,但您的意思是输入两个条目。您需要引用包装列表中的每个条目。我会找到一个副本来结束。

标签: php mysql laravel


【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-28
      • 2017-01-14
      • 1970-01-01
      • 1970-01-01
      • 2020-09-06
      • 1970-01-01
      • 2010-12-23
      • 1970-01-01
      相关资源
      最近更新 更多