代码之家  ›  专栏  ›  技术社区  ›  Junior

有没有一种方法可以在同一个查询中将同一个参数用在多个地方?

  •  0
  • Junior  · 技术社区  · 6 年前

    我正在从事一个基于laravel5.7的项目,在这个项目中,elokent被用作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]:无效的参数号

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

    4 回复  |  直到 6 年前
        1
  •  0
  •   matt    6 年前

    你想要点什么吗?

    $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]);
    
        2
  •  0
  •   krisanalfa    6 年前

    这个怎么样?

    $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();
    
        3
  •  0
  •   Matteo    6 年前

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

    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

        4
  •  -1
  •   Peter 4lbertyson    6 年前