當前位置 主頁 > 服務器問題 > Linux/apache問題 > 最大化 縮小

    Laravel 實現Eloquent模型分組查詢并返回每個分組的數量 groupBy

    欄目:Linux/apache問題 時間:2019-10-27 21:54

    Laravel 5.5

    Linux mint 18

    PHPStorm

    最近剛玩Laravel,手冊源碼還沒來得及看完就躍躍欲試做了個小項目,其中有個需求是分組查詢數據庫中的一個字段并返回每個分組中的數量,還是去翻手冊(手冊確實夠簡單):

    groupBy 和 having 方法可用來對查詢結果進行分組。having 方法的用法和 where 方法類似:
    $users = DB::table('users')
       ->groupBy('account_id')
       ->having('account_id', '>', 100)
       ->get();

    網上去查,發現一個輪子

    $user_info = DB::table('usermetas')
        ->select('browser', DB::raw('count(*) as total'))
        ->groupBy('browser')
        ->get();

    再去查手冊

    ## 指定一個 Select 子句#
    
    當然,你并不會總是想從數據表中選出所有的字段。這時可使用 select 方法自定義一個 select 子句來查詢指定的字段:
    
    $users = DB::table('users')->select('name', 'email as user_email')->get();
    
    ## 原始表達式#
    
    有時候你可能需要在查詢中使用原始表達式。這些表達式將會被當作字符串注入到查詢中,所以要小心避免造成 SQL 注入攻擊!要創建一個原始表達式,可以使用 DB::raw 方法:
    
    $users = DB::table('users')
         ->select(DB::raw('count(*) as user_count, status'))
         ->where('status', '<>', 1)
         ->groupBy('status')
         ->get();
    

    可惜總是愛折騰,不想著用點奇跡淫巧就對不起自己這手藝人,于是有了:

    $sql = Data::raw('count(*) as value');
    
    $obj = self::whereBetween('modified',[$begin,$end])->select('city as name',$sql)
                ->groupBy('city')
                ->get()
                ->toArray();
    

    代碼也不客氣了,直接撂了挑子:

    毛病出在這句身上:

    $sql = Data::raw('count(*) as value'); 

    我用了個Data(Model),返回的是個Builder對象,而此處卻要一個字符串,所以改回了

    $sql = DB::raw('count(*) as value');

    此時$sql是個string,至于有木有辦法在此處用Model,慢慢研究吧,任重道遠!

    參考:

    Laravel Eloquent groupBy() AND also return count of each group

    以上這篇Laravel 實現Eloquent模型分組查詢并返回每個分組的數量 groupBy()就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持IIS7站長之家。

在线观看中文字幕理论片