2016-11-20 3 views
0

Laravel 5:整数を文字列にエスケープwhereRawこのためLaravel雄弁クエリで何

select * from `jobs` where (
     400000 between min_salary and max_salary 
      or 
     600000 between min_salary and max_salary 
); 

は、私が試したが、整数を文字列にカプセル化雄弁クエリ以下

$min = 400000; 
$max = 600000; 
Job::whereRaw(' 
    ? between min_salary and max_salary 
     or 
    ? between min_salary and max_salary', 
    [$min,$max] 
)->get(); 

も試み鋳造およびDB :: Rawオプションのどれも期待どおりに機能しませんでした。

protected $casts = [ 
    'min_salary' => 'integer', 
    'max_salary' => 'integer', 
]; 

$min = 400000; 
$max = 600000; 
Job::whereRaw(' 
    ? between min_salary and max_salary 
     or 
    ? between min_salary and max_salary', 
    [DB::Raw($min),DB::Raw($max)] 
)->get(); 

は私が期待しかし、私はハードに直接(安全でない)クエリ

$min = 400000; 
$max = 600000; 
Job::whereRaw(
    $min.' between min_salary and max_salary 
    or 
    '.$max.' between min_salary and max_salary' 
)->get(); 

答えて

3

をコード化しているとして、以下の雄弁なクエリは機能してみました、これを試してみてください:

Job::where(function($query){ 
    $query->where('min_salary','<',400000); 
    $query->where('max_salary','>',400000); 
})->orWhere(function($query){ 
    $query->where('min_salary','<',600000); 
    $query->where('max_salary','>',600000); 
})->get();