2017-02-14 82 views
2

我想根据表中的其他列计算Laravel中的列,但由于MySQL不允许,我无法对它们执行WHERE操作。如何在Laravel雄辩中计算列的WHERE子句?

我想我需要一个子查询。我能够在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

原始内部的SELECT语句需要用'()'包装,并且它仍然说'语法错误或访问冲突:1248每个派生表都必须有自己的别名' – Rohan