sql builder中的多个BETHER语句

sql builder中的多个BETHER语句,sql,laravel-4,builder,parentheses,Sql,Laravel 4,Builder,Parentheses,我正在使用Laravel4SQLBuilder创建一个相当大的查询。它大致看起来像,从表中获取数据 where(yada-yada)和where年龄介于(yada,yada)之间或介于(yada,yada)和where(yad-yada)之间 但我想要的是这个 where(yada-yada)和where(年龄介于(yada,yada)或(yada,yada)和where(yad-yada)之间) 一些代码: $query = Subject::grabBasic();// start

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

where(yada-yada)和where年龄介于(yada,yada)之间或介于(yada,yada)和where(yad-yada)之间

但我想要的是这个

where(yada-yada)和where(年龄介于(yada,yada)或(yada,yada)和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值的数组并创建一条语句,当将该语句添加到查询的其余部分时,将给出所需的结果。e-g。sql查询将在正确的位置使用括号

我也希望在没有原始查询的情况下执行此操作,我怀疑有一种方法可以执行此操作,但我一直无法找到它


谢谢,

我使用了原始查询:(

这是它的样子

$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));
}
希望这有助于其他人将()放入查询生成器中