0

我有 4 张桌子users, opportunities, level_translations and levels

用户
ID、姓名、电子邮件

机会
id、client_name、user_id、total_price

级别
id, min, max

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 
4

1 回答 1

0

我找到了解决方案。我的解决方案包含两个部分,
第一部分
创建一个MYSQL 函数,我称之为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 

我希望这有用。

于 2016-08-24T00:47:52.737 回答