2016-08-21 75 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 

我希望這有用。