php
  • jquery
  • mysql
  • laravel
  • eloquent
  • 2017-03-16 110 views 1 likes 
    1

    我有一個JobPosts表,我想選擇所有的記錄與平均薪水大於給定的價值。我可以通過使用原始查詢來完成,但我覺得我缺少一些東西。我的代碼:雄辯的方式來過濾平均2列

    $salary = 100000; 
    $query = JobPost::whereRaw('("salary_min" + "salary_max")/2 >= ' . $salary)->getQuery(); 
    

    我可以不使用原始查詢或以其他更好的方式來做到嗎?

    回答

    0

    試試這個:

    $salary = 100000; 
    echo $query = JobPost::whereRaw($salary.' < (SELECT AVG(salary_min + salary_max) FROM job_posts)')->get(); 
    

    job_posts替換你的表名

    +0

    THX的答案,但你的代碼使用原始查詢過,我想這樣做而不使用它。我在$ salary變量中擔心SQL注入。我可以做一些檢查,以確保$薪水肯定是整數,但我想知道是否有辦法做到這一點沒有原始查詢。 – user3529607

    0

    不知道這作品都沒有在一段感動Laravel,但出來的內存,你應該能夠做這樣的事:

    $salary = 100000; 
    $query = JobPost::selectRaw('((salary_min + salary_max)/2) as average')->where('average', '>', $salary)->getQuery(); 
    
    +0

    Thx爲答案,但您的代碼也使用原始查詢,我想不做使用它。我在$ salary變量中擔心SQL注入。我可以做一些檢查,以確保$薪水肯定是整數,但我想知道是否有辦法做到這一點沒有原始查詢。 – user3529607

    0

    它很容易兄弟

    只是嘗試

    控制器代碼

    $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 
    
    +0

    我的問題中的代碼是大型和複雜的搜索查詢的一部分,所以我不能使用你的方法,但謝謝你的答案。 – user3529607

    0

    兄弟,我有另外一個解決方案

    作出新列平均值在表中,並且當您插入數據時,使平均工資計算值存儲在平均值列中。

    現在很容易比較您的平均值值並獲得搜索結果。

    $salary = 100000; 
    $query = JobPost::whereRaw('Avg' ,' >=', $salary)->getQuery(); 
    

    平均新的列名和$薪水是你的變量

    試試這個邏輯兄弟

    相關問題