Php 有没有一种方法可以在同一个查询中的多个位置使用相同的参数?

Php 有没有一种方法可以在同一个查询中的多个位置使用相同的参数?,php,laravel,laravel-5,pdo,eloquent,Php,Laravel,Laravel 5,Pdo,Eloquent,我正在从事一个基于Laravel5.7的项目,在这个项目中,Elount被用作ORM 我需要在数据库上执行原始SQL语句。但是,我的查询在多个位置使用相同的参数 下面是一个查询示例“这不是我真正的查询,更多的是为了解释问题。我的实际查询非常复杂,并且多次重复使用相同的参数” 从表中选择* 其中a介于:from和:to之间 和c>:来自 和d'2017-01-01 00:00:00','to'=>'2018-10-01 00:00:00']; 但这给了我以下的错误 SQLSTATE[HY093]

我正在从事一个基于Laravel5.7的项目,在这个项目中,Elount被用作ORM

我需要在数据库上执行原始SQL语句。但是,我的查询在多个位置使用相同的参数

下面是一个查询示例“这不是我真正的查询,更多的是为了解释问题。我的实际查询非常复杂,并且多次重复使用相同的参数”

从表中选择*
其中a介于:from和:to之间
和c>:来自
和d<:至
我期待着下面的工作

$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']);
$resorces=DB::select('select*FROM table
其中a介于:from和:to之间
和c>:来自
和d<:to',['from'=>'2017-01-01 00:00:00','to'=>'2018-10-01 00:00:00'];
但这给了我以下的错误

SQLSTATE[HY093]:参数编号无效


如何使用Eloquent在同一查询中的多个位置重复使用相同的参数?

是否需要此功能

$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]);
$from='2017-01-01 00:00:00';
$to='2018-10-01 00:00:00';
$resorces=DB::select('select*FROM table
在哪里?和之间?
和c>?
和d<?',[$从,$到,$从,$到];
这可能会有所帮助:

看起来这可能是一个bug,这个答案为解决方法提供了几个选项。

这个怎么样

$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();
$from='2017-01-01 00:00:00';
$to='2018-10-01 00:00:00';
$resorces=DB::table('table')
->whereRaw('介于?和?'之间,[$from,$to])
->whereRaw('c>?',[$from])
->whereRaw('d<?',[$to])
->get();

在模型中创建动态查询范围

public function scopeQUERY ($query, $value1, $value2){

      $query = DB::(YOUR QUERY);

      return $query;
}
你的控制器

public function hello(Model name $Modelname){

         $query = $Modelname->QUERY($value1, $value2);

}

文档

我试图避免这样做,因为我有更多的参数,这表明它无法处理重复的命名参数:
public function hello(Model name $Modelname){

         $query = $Modelname->QUERY($value1, $value2);

}