我有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
答案 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
我希望这很有用。