Laravel与条件有很多很多关系

时间:2016-08-21 01:43:33

标签: php mysql eloquent laravel-5.2 laravel-query-builder

我有4张表users, opportunities, level_translations and levels

用户
id,姓名,电子邮件

机会
id,client_name,user_id,total_price

水平
id,min,max

level_translations
id,name,description,locale,level_id

我想在当前区域设置中获取给定用户ID的级别名称..我使用laravel-translatable包来本地化我的应用程序

获得等级应该是这样的

select * from levels where sum(opportunities.total_price) < levels.max and sum(opportunities.total_price) > levels.min 

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。我的解决方案包含两个部分 第一部分
创建MYSQL Function,我称之为 sumUserOwnopportunities(USERID)

    DELIMITER $$
CREATE  FUNCTION `sumUserWonOpportunities`(USERID INT) 
 RETURNS double
BEGIN
     DECLARE TOTAL_SUM DOUBLE DEFAULT 0;
     SELECT SUM(opportunities.total_price) from opportunities 
     WHERE opportunities.user_id=USERID AND (opportunities.status=1 OR opportunities.status=2) INTO TOTAL_SUM;
        RETURN TOTAL_SUM;
END$$
DELIMITER ;

第二部分
在用户模型中

function level(){
   return  Level::where(function ($q){
            $q->where("min","<",DB::raw(" sumUserWonOpportunities($this->id)"))
            ->where("max",">",DB::raw(" sumUserWonOpportunities($this->id)"));
        })->first();
}

现在我可以打电话了

$user=User::find(1);
$level=$user->level()->name;// it will return level name in current locale 

我希望这很有用。