Eloquent — Как использовать псевдоним в следующих нескольких условиях?

В продолжение вопроса в ветке 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 наряду с предложением «Между»), кажется невозможным. Любое предложение / подсказка для объединения условий exp_range в $ user_query приветствуется.

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

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector