簡體   English   中英

將SQL更改為Laravel中的查詢生成器

[英]Change SQL into Query Builder in Laravel

這是我的SQL語句

SELECT `pams_users`.display_name,`pams_user_levels`.description FROM pams_users 
JOIN pams_developer ON `pams_users`.developer_id=`pams_developer`.id AND `pams_developer`.id=27 OR `pams_users`.`parent_dev`=27
JOIN pams_user_levels ON `pams_user_levels`.id=`pams_users`.user_level AND `pams_user_levels`.id=6
GROUP BY  `pams_users`.display_name   

這是我基於SQL的查詢構建器

 DB::table('pams_users')
        ->join('pams_developer','pams_developer.id','pams_users.developer_id')
        ->join('pams_user_levels','pams_user_levels.id','pams_users.user_level')
        ->where('pams_developer.id',27)
        ->orWhere('pams_users.parent_dev',27)
        ->where('pams_user_levels.id',6)
        ->select('developer_name','description','display_name')
        ->selectRaw('count(pams_users.id) as count')
        ->groupBy('display_name')
        ->get();

但是,查詢生成器未顯示任何錯誤,但與SQL語句顯示了不同的結果。
任何人都可以找出我的查詢生成器問題嗎?
感謝您對我的查詢生成器的任何建議和評論。


問題可能是在那里的Eloquent查詢構建器沒有封裝OR WHERE子句。 您可以將閉包傳遞到where()中,以執行此操作,如下所示。

我還使用DB::raw而不是selectRaw()方法將選擇分組到單個方法調用中。

DB::table('pams_users')
    ->join('pams_developer','pams_developer.id','pams_users.developer_id')
    ->join('pams_user_levels','pams_user_levels.id','pams_users.user_level')
    ->select([
        'developer_name',
        'description',
        'display_name',
        DB::raw('count(pams_users.id) as count'), // this avoids the separate selectRaw()
    ])
    ->where(function($query) {
        $query->where('pams_developer.id',27)
            ->orWhere('pams_users.parent_dev',27);
    })
    ->where('pams_user_levels.id',6)
    ->groupBy('display_name')
    ->get();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM