【问题标题】:Multiple between statements in sql buildersql builder中的多个语句之间
【发布时间】:2014-02-07 22:36:17
【问题描述】:

我正在使用 laravel 4 sql builder 创建一个相当大的查询。它大致看起来像,从表中获取数据

where(yada yada)and where age between(yada, yada) or between(yada, yada) and where(yad yada)。

但我想要的是这个。

where(yada yada)and where (age between(yada, yada) or between(yada, yada)) and where(yad yada)。

一些代码:

    $query = Subject::grabBasic();// start writing query, which results to grab.
    $agelength  = sizeof($fromAgeValue);
    $count      = 0;
    $ageflag    = 0;
    foreach( array_combine($fromAgeValue, $toAgeValue) as   $from=>$to ){
        $count+=1;
        if($ageflag==0){
            if(($from!=null)&&($to!=null)){
                $query = Subject::addfromAgeToAge($query, $from, $to);
                $ageflag=1;                                                 
            }
        }else if(($from!=null)&&($to!=null)){
            $query = Subject::orfromAgeToAge($query, $from, $to);
        }
    }

...继续添加到 $query

主题代码:

static function addfromAgeToAge($query, $fromAge, $toAge){
    return $query->whereBetween('Age', array($fromAge, $toAge));
}

static function orfromAgeToAge($query, $fromAge, $toAge){
    return $query->orWhereBetween('Age', array($fromAge, $toAge));
}

那么,有没有办法编写 addToAge 构建器函数来接收 fromage 和 toage 值的数组并创建一个语句,当添加到查询的其余部分时,将给出所需的结果。例如。 sql 查询将在正确的位置有括号。

我也想在没有原始查询的情况下执行此操作,我怀疑有一种方法可以做到这一点,我只是无法找到它。

谢谢,

【问题讨论】:

    标签: sql laravel-4 builder parentheses


    【解决方案1】:

    我使用原始查询:(

    这就是它的样子。

    $agecounter = 0;// tells me how many from age to age pairs were filed out coorrectly.
        foreach( array_combine($fromAgeValue, $toAgeValue) as   $from=>$to ){
            if(($from!=null)&&($to!=null)){
                $agecounter+=1;
            }
        }
        $agelength  = sizeof($fromAgeValue);
        $ageflag    = 0;
        foreach( array_combine($fromAgeValue, $toAgeValue) as   $from=>$to ){
            if($ageflag==0){
                if(($from!=null)&&($to!=null)){
                    $query = Subject::addfromAgeToAge($query, $from, $to, $agecounter);     // ages put in for loop when multiple are added.
                    $ageflag=1;                                                 // add or's
                    $agecounter -=1;
                }
            }else if(($from!=null)&&($to!=null)){
                $query = Subject::orfromAgeToAge($query, $from, $to, $agecounter);
                $agecounter -=1;
            }
        }
    

    在我的模型中:

    static function addfromAgeToAge($query, $from, $to, $count){
        if($count>1){
            return $query->whereRaw('( Age between ? and  ?', array($from, $to));
        }
        return $query-> whereBetween('Age', array($from, $to));
    }
    
    static function orfromAgeToAge($query, $from, $to, $count){
        if($count==1){
                return $query->orWhereRaw(' Age between ? and  ?)', array($from, $to));
        }
        return $query->orWhereRaw(' Age between ? and  ?', array($from, $to));//('Age', array($fromAge, $toAge));
    }
    

    希望这有助于其他人将 () 放入查询构建器中。

    【讨论】:

      猜你喜欢
      • 2019-03-17
      • 1970-01-01
      • 2017-03-22
      • 1970-01-01
      • 2012-05-05
      • 2019-04-15
      • 2018-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多