我有一個JobPosts表,我想選擇所有的記錄與平均薪水大於給定的價值。我可以通過使用原始查詢來完成,但我覺得我缺少一些東西。我的代碼:雄辯的方式來過濾平均2列
$salary = 100000;
$query = JobPost::whereRaw('("salary_min" + "salary_max")/2 >= ' . $salary)->getQuery();
我可以不使用原始查詢或以其他更好的方式來做到嗎?
我有一個JobPosts表,我想選擇所有的記錄與平均薪水大於給定的價值。我可以通過使用原始查詢來完成,但我覺得我缺少一些東西。我的代碼:雄辯的方式來過濾平均2列
$salary = 100000;
$query = JobPost::whereRaw('("salary_min" + "salary_max")/2 >= ' . $salary)->getQuery();
我可以不使用原始查詢或以其他更好的方式來做到嗎?
試試這個:
$salary = 100000;
echo $query = JobPost::whereRaw($salary.' < (SELECT AVG(salary_min + salary_max) FROM job_posts)')->get();
job_posts
替換你的表名
不知道這作品都沒有在一段感動Laravel,但出來的內存,你應該能夠做這樣的事:
$salary = 100000;
$query = JobPost::selectRaw('((salary_min + salary_max)/2) as average')->where('average', '>', $salary)->getQuery();
Thx爲答案,但您的代碼也使用原始查詢,我想不做使用它。我在$ salary變量中擔心SQL注入。我可以做一些檢查,以確保$薪水肯定是整數,但我想知道是否有辦法做到這一點沒有原始查詢。 – user3529607
它很容易兄弟
只是嘗試
控制器代碼
$salary = 100000; $query = JobPost::all();
return view('--your blade file name--', compact('query'))
和寫入葉片文件此代碼。將得到$ avg「display:block」或「display:none」。然後爲jobpost應用$ avg樣式。所以
如果「顯示:無」是指jobpost將隱藏其他「顯示:塊」是指jobpost將顯示
@foreach($query as $querys)
<?php
$value_salary_min = $querys['salary_min'];
$value_salary_max = $querys['salary_max'];
$avg = ($value_salary_min + $value_salary_max)/2
$avg = $avg >= $salary? "display:block" : "display:none";
?>
@endforeach
我的問題中的代碼是大型和複雜的搜索查詢的一部分,所以我不能使用你的方法,但謝謝你的答案。 – user3529607
兄弟,我有另外一個解決方案
作出新列平均值在表中,並且當您插入數據時,使平均工資計算值存儲在平均值列中。
現在很容易比較您的平均值值並獲得搜索結果。
像
$salary = 100000;
$query = JobPost::whereRaw('Avg' ,' >=', $salary)->getQuery();
平均新的列名和$薪水是你的變量
試試這個邏輯兄弟
THX的答案,但你的代碼使用原始查詢過,我想這樣做而不使用它。我在$ salary變量中擔心SQL注入。我可以做一些檢查,以確保$薪水肯定是整數,但我想知道是否有辦法做到這一點沒有原始查詢。 – user3529607