【问题标题】:Laravel 5: whereRaw escapes integer to stringLaravel 5:whereRaw 将整数转义为字符串
【发布时间】:2016-11-20 19:26:47
【问题描述】:

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

还尝试了 Casting 和 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();

【问题讨论】:

    标签: mysql laravel-5 eloquent


    【解决方案1】:

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 2017-12-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-10
      • 2012-02-21
      • 2010-12-31
      相关资源
      最近更新 更多