簡體   English   中英

無法在laravel db語句中使用mysql函數IN

[英]Cannot use mysql function IN in laravel db statement

我在Laravel 5.2 DB語句中使用MySQL的IN函數時遇到問題。 這是示例:

$str_array = implode(",",$array_reservations);
$sql_result = DB::select("
            select r.id,r.people,r.date,r.status,p.alias,u.name,p.profile
            from  reservations r inner join places p on p.id = r.place_id 
            inner join  users u on u.id = r.user_id
            where r.id in(?)
            order by r.date desc
            ", [$str_array]);

但是在結果中,我只是得到數組的第一次保留的結果。

數組的長度將始終是可變的。

在這種情況下,您需要使用DB :: raw。 另外,您需要創建盡可能多的“?” 您需要,對於要綁定的每個ID。 這就是PDO的工作方式:

$str_array = implode(",",$array_reservations);
$bindings = trim(str_repeat('?,', count($array_reservations)), ',');

DB::select($sql, $inputids);
$sql_result = DB::select(DB::raw("
        select r.id,r.people,r.date,r.status,p.alias,u.name,p.profile
        from  reservations r inner join places p on p.id = r.place_id 
        inner join  users u on u.id = r.user_id
        where r.id in($bindings)
        order by r.date desc
        "), $str_array);

但是,IMO,您應該使用查詢生成器:

DB::table('reservations')
    ->join('places','places.id','=','reservarions.place_id')
    ->join('users','users.id','=','reservarions.user__id')
    ->whereIn('reservations.id',$str_array)
    ->orderBy('reservations.date', 'DESC');

嘗試這個 :

  $sql_result = DB::table('reservations AS r')
        ->join('places AS p', 'p.id', '=', 'r.place_id')
        ->join('users AS u', 'u.id', '=', 'r.user_id')
        ->select('r.id','r.people','r.date','r.status','p.alias','u.name','p.profile')
        ->whereIn('r.id',$str_array)                    // write you conditions in array
        ->orderBy('r.date', 'desc')
        ->get();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM