Laravel 与条件的多对多关系
Laravel many to many relationship with conditions
我有 4 张桌子 users, opportunities, level_translations and levels
用户
身份证、姓名、电子邮件
机会
id, client_name, user_id, total_price
级别
编号、最小值、最大值
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
我找到了解决办法。我的解决方案包含两个部分
第一部分
创建一个 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
希望有用。