2016-11-20 3 views
0

Was die Laravel eloquent Abfrage hierfür ist:Laravel 5: whereRaw entkommt integer string

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

Ich habe versucht, die folgenden eloquent Abfrage, die die ganze Zahl zu String kapselt

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

Auch versucht Casting und DB :: Raw keine der Optionen wurde wie erwartet gearbeitet.

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(); 

habe ich versucht, die unten eloquent Abfrage funktioniert wie erwartet, aber ich habe hart die Abfrage direkt (Unsafe)

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

Antwort

3

Versuchen Sie, diese codiert:

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();