2016-08-21 84 views
0

一对多的关系我有4个表users, opportunities, level_translations and levelsLaravel许多与条件

用户
ID,姓名,电子邮件

机会
ID,CLIENT_NAME,USER_ID,TOTAL_PRICE

水平
id,min,m斧头

level_translations
ID,名称,描述,语言环境,level_id

我想在当前区域设置为指定的用户ID来获得级别名称..我使用laravel-translatable包本地化我的申请

得到水平应该是这样的

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

回答

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 

我希望这有用。