2017-02-14 9 views
2

Я пытаюсь вычислить столбцы в Laravel в соответствии с другими столбцами в таблице, но я не могу делать WHERE на них, поскольку MySQL этого не позволяет.Как сделать предложение WHERE на вычисленных столбцах в Laravel eloquent?

Я понял, что мне нужен дополнительный запрос. Я могу сделать это в MySQL следующим образом:

SELECT * FROM(
SELECT 
@inactive_percentage:=((UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(APP_UPDATE_DATE)))/(UNIX_TIMESTAMP(DEL_TASK_DUE_DATE) - UNIX_TIMESTAMP(APP_UPDATE_DATE)) * 100 AS inactive_percentage, 
IF(@inactive_percentage <= 33, "low", IF(@inactive_percentage >= 33 && @inactive_percentage <= 66, "normal", "high")) AS inactive 

FROM APP_CACHE_VIEW 
) as foo WHERE `inactive`='low' 

, но я не знаю, как сделать то же самое в Laravel. У меня есть несколько ссылок в Интернете, но они не имеют никакого смысла для меня вообще. Как перевести это в код «Красноречивый»?

ответ

0

Используйте DB :: raw для своего пользовательского подзапроса.

$datas = DB::table(DB::raw('SELECT 
@inactive_percentage:=((UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(APP_UPDATE_DATE)))/(UNIX_TIMESTAMP(DEL_TASK_DUE_DATE) - UNIX_TIMESTAMP(APP_UPDATE_DATE)) * 100 AS inactive_percentage, 
IF(@inactive_percentage <= 33, "low", IF(@inactive_percentage >= 33 && @inactive_percentage <= 66, "normal", "high")) AS inactive 
FROM APP_CACHE_VIEW as foo'))->where('active','low')->get(); 

then 
foreach($datas as $data){ 
    //Your data processing/formatting 
} 
+0

ЗЕЬЕСТ внутри исходных потребностей быть завернуты в '()' и еще он говорит, 'Синтаксическая ошибка или нарушение прав доступа: 1248 Каждая производная таблица должна иметь свой собственный alias' – Rohan