2016-08-21 4 views
0

У меня есть 4 таблицы users, opportunities, level_translations and levelsLaravel отношения многие ко многим условиям

пользователей
идентификатор, имя, адрес электронной

возможности
идентификатор, имя_клиента, user_id, TOTAL_PRICE

уровни
id, min, m топор

level_translations
идентификатор, название, описание, локалите, level_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 

Надеюсь, это полезно.

Смежные вопросы