代码之家  ›  专栏  ›  技术社区  ›  MrChrissss

其中在DB中的数组绑定::raw laravel 5.4

  •  7
  • MrChrissss  · 技术社区  · 9 年前

    WHERE IN DB

    例子:

    $arr = [1,2,3];
    DB::select(DB::raw("select * from test1 WHERE id IN ? "), [$arr]);
    

    由于某些原因,数组未更改为以下查询:

    select * from test1 WHERE id IN (1,2,3)
    

    6 回复  |  直到 9 年前
        1
  •  5
  •   gaurav    9 年前

    在laravel试一试:

    $arr = [1,2,3];
    $result = DB::table('test1')->whereIn('id', $arr)->get();
    dd($result);
    

    并将其用于原始查询:

    $arr = [1,2,3];
    $arr = join(",",$arr);
    $result =  DB::select(DB::raw("SELECT * FROM test1 WHERE id IN (".$arr.")"));
    dd($result);
    

     $arr = [1,2];
     $arr = join(",",$arr);
     $result =  DB::select(DB::raw("SELECT * FROM test1 WHERE id IN (?,?)"),$arr);
     dd($result);
    

        2
  •  4
  •   nilecrocodile    5 年前
    $arr = [1,2,3];
    $placeholders = implode(",", array_fill(0, count($arr), '?'));
    
    DB::select("select * from test1 WHERE id IN ($placeholders)", $arr);
    

    此示例:

    1. 支持数组的任意长度
    2. 不包含循环
    3. 安全地传递参数

    在本例中,我用等于数组长度的问号填充了一个新数组。然后粘上新数组,用逗号分隔,得到“,?,?,…”。然后我在括号运算符“IN”之间插入这个子字符串。我将项目数组本身作为select函数的第二个参数传递。因此,元素数组的每个元素在“in”运算符中都有自己的占位符。

        3
  •  1
  •   linktoahref Nimya V    9 年前

    DB::table("test1")->whereIn('id', $arr)->get();
    

    https://laravel.com/docs/5.4/queries#where-clauses

        4
  •  0
  •   Nasr    9 年前

    或雄辩:

    $q= TestModel::where('id',$arr)->get();
    
        5
  •  0
  •   adriano machado    6 年前

    尝试:

    $array = [2,5,9,7,5];
    $arrPos = [];
    $arrBind = [];
    foreach ($array as $pos => $id) {
        $arrPos[] = ":id_{$pos}";
        $arrBind["id_{$pos}"] = $id;
    }
    
    $sql = 
    "  SELECT * FROM test1 WHERE id IN (".implode(', ', $arrPos).") ";
    $rs = DB::select($sql, $arrBind);
    
        6
  •  -1
  •   Invis1ble    4 年前

    $placeholders = substr(str_repeat(', ?', count($arr)), 2);
    
    DB::select("select * from test1 WHERE id IN ($placeholders)", $arr);