[英]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.