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

时间:2018-10-04 00:02:40

标签: php laravel laravel-5 pdo eloquent

我正在一个基于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在同一查询中的多个位置重复使用相同的参数?

4 个答案:

答案 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);

}

文档https://laravel.com/docs/5.7/eloquent#query-scopes

答案 3 :(得分:-1)

这可能会有所帮助:

https://stackoverflow.com/a/35968797/10102373

这似乎是一个错误,此答案为解决方法提出了几种选择。