Laravel Query Builder - предложение с несколькими вариантами WHERE

Как вы можете сделать это предложение where в построителе запросов?

WHERE
    (ENTRY_MODE = 'ACTUAL' AND r.YEAR BETWEEN '2011' AND '2014')
    OR
    (ENTRY_MODE = 'BUDGETED' AND r.YEAR = '2014')

Вот мой текущий код

->where(function($query) use($year, $yearFrom, $yearTo){
    $query->where(function($query) use ($year){
        $query->where('eh.ENTRY_MODE', 'BUDGETED')
        ->where('r.YEAR', $year)
    })->orWhere(function($query) use ($yearFrom, $yearTo){
        $query->where('eh.ENTRY_MODE', 'ACTUAL')
        ->whereIn('r.YEAR', array($yearFrom, $yearTo))
    })
})      

Приведенный выше код дает мне syntax error, unexpected '}' в строке 5 (или где часть)


person Kiel    schedule 12.07.2016    source источник


Ответы (1)


Просто semicolons проблема, попробуйте следующее:

->where(function($query) use($year, $yearFrom, $yearTo){
        $query->where(function($query) use ($year){
            $query->where('eh.ENTRY_MODE', 'BUDGETED')
            ->where('r.YEAR', $year); //<--semicolon here
        })->orWhere(function($query) use ($yearFrom, $yearTo){
            $query->where('eh.ENTRY_MODE', 'ACTUAL')
            ->whereIn('r.YEAR', array($yearFrom, $yearTo)); //<--semicolon here
        }); //<--semicolon here
    }); //<-- and one last semicolon here if this is the end of your chain.
person Ismail RBOUH    schedule 12.07.2016
comment
О, пропустил! Спасибо! Я подумал, что можно не включать точку с запятой. - person Kiel; 13.07.2016