我正在一个基于Laravel 5.7的项目中,其中Eloquent用作ORM。
我需要在数据库上执行原始SQL语句。但是,我的查询在多个位置使用相同的参数。
这是一个查询示例:“这不是我的真实查询,更多是为了解释问题。我的实际查询非常复杂,并且多次重复使用相同的参数”
SELECT * FROM table
WHERE a BETWEEN :from AND :to
AND c > :from
AND d < :to
我希望以下内容能起作用
$resorces = DB::select('SELECT * FROM table
WHERE a BETWEEN :from AND :to
AND c > :from
AND d < :to', ['from' => '2017-01-01 00:00:00', 'to' => '2018-10-01 00:00:00']);
但这给了我以下错误
SQLSTATE [HY093]:参数编号无效
如何使用Eloquent在同一查询中的多个位置重复使用相同的参数?
答案 0 :(得分:0)
这样对您有用吗?
$from = '2017-01-01 00:00:00';
$to = '2018-10-01 00:00:00';
$resorces = DB::select('SELECT * FROM table
WHERE a BETWEEN ? AND ?
AND c > ?
AND d < ?', [$from, $to, $from, $to]);
答案 1 :(得分:0)
怎么样?
$from = '2017-01-01 00:00:00';
$to = '2018-10-01 00:00:00';
$resorces = DB::table('table')
->whereRaw('a BETWEEN ? AND ?', [$from, $to])
->whereRaw('c > ?', [$from])
->whereRaw('d < ?', [$to])
->get();
答案 2 :(得分:0)
在模型中创建动态查询范围。
public function scopeQUERY ($query, $value1, $value2){
$query = DB::(YOUR QUERY);
return $query;
}
您的控制器
public function hello(Model name $Modelname){
$query = $Modelname->QUERY($value1, $value2);
}
答案 3 :(得分:-1)