Eloquent - Как использовать псевдоним в следующих условиях? - PullRequest
0 голосов
/ 13 декабря 2018

В продолжение вопроса в теме MYSQL Как выполнить произвольную разницу в месяце между двумя датами в MYSQL? , я попытался присоединиться к таблице allow_exp_range только при условии с полученным результатом "exp_in_months" вместе снесколько других условий.Ниже приведены подробности.

table_name = "user"
id | name | join_date 
---------------------
1| Sam | 25-11-2017
2| Moe | 03-04-2017
3| Tim | 04-07-2018
4| Sal | 30-01-2017
5| Joe | 13-08-2018


//$user_query is the eloquent query after chaining different other conditions 
$user_query = $user_query->select(DB::raw("id, name , (YEAR(CURDATE())*12+MONTH(CURDATE())) - (YEAR(STR_TO_DATE(join_date, '%d-%m-%Y'))*12+MONTH(STR_TO_DATE(join_date, '%d-%m-%Y'))) - 1 -- whole months
           + CASE WHEN DAY(LAST_DAY(STR_TO_DATE(join_date, '%d-%m-%Y'))) - DAY(STR_TO_DATE(join_date, '%d-%m-%Y')) + 1 + DAY(CURDATE()) > 15 THEN 1 ELSE 0 END -- broken month
           AS exp_in_months)

table_name: "allowed_exp_range"
starting_exp_months | end_exp_months | category_id
--------------------------------------------------
0 | 6 | 1
9 | 24 | 1
11 | 50 | 2
100 | 150 | 2


if ($exp_based_condition_allowed == 1) {  // a variable from input
    $exp_ranges = AllowedExpRange::where('category_id', '=', $category_id)->get();

    $user_query = $user_query->where(function($q) use($exp_ranges) {
         foreach($exp_ranges as $range) {
             $q->orWhereBetween("exp_in_months", [$range->starting_exp_months , $range->end_exp_months]);
         }
    }
}

//there are still other conditions to be chained to $user_query after checking the experience range
$user_query = $user_query->get();

При выполнении кода, приведенного выше, происходит сбой с сообщением «Столбец не найден: 1054 Неизвестный столбец« exp_in_months »в« выражении where »», поскольку псевдоним нельзя использовать в где на том же уровнеSQL.Как использовать псевдоним из select в следующих цепочках где / где между запросами, использующими eloquent?

Я могу добиться ближайшего вывода, получая вывод коллекции непосредственно перед exp_range и фильтруя вывод коллекции с другими условиями, но яне удалось связать последующие условия с $ user_query после условия exp_range.

В нескольких публикациях предлагается использовать предложение «has» при выполнении необработанного sql, но несколько предложений с вложенными операторами (например, orHaving наряду с предложением «ween ») не представляется возможным.Любые предложения / подсказки для цепочки условий exp_range к $ user_query приветствуются.

Заранее спасибо!

...