Laravel 5.1 通过 having 或 having 使用计数、求和、分组

Laravel 5.1 use count,sum, group by having or having

请帮忙,我怎样才能将代码传输到查询生成器?

SELECT *,
       SUM(used_count),COUNT(code)
FROM promo_codes pc 
LEFT JOIN promo_code_user pcu on pc.id=pcu.`promo_code_id` 
LEFT JOIN promo_code_types pct on pc.`promo_code_type_id`=pct.id 
WHERE (pc.expiry_date >= CURDATE() or pc.expiry_date is NULL) and
      (pct.expiry_date >= CURDATE() or pct.expiry_date is null) 
GROUP BY code
HAVING ( (sum(used_count) < global_max_uses  or sum(used_count) is null) and
       ( count(code) < max_users  or count(code) is null) ) ;

谢谢

我无法测试查询,所以我临时尝试了一些东西。

$promo = DB::table('promo_codes')
    ->select(‘*’,DB::raw('SUM(used_count),COUNT(code)'))
    ->leftjoin('promo_code_user','promo_codes.id','=','promo_code_user.promo_code_id')
    ->leftjoin('promo_code_types','promo_codes.promo_code_type_id','=','promo_code_types.id')
    ->where(function ($query) {
            $query->where('promo_codes. expiry_date', '>=',DB::raw('curdate()'))
                  ->orWhereNull('promo_codes.expiry_date');
        })
    ->where(function ($query) {
            $query->where('promo_code_types.expiry_date', '>=', DB::raw('curdate()'))
                  ->orWhereNull('promo_code_types.expiry_date');
        })
    ->groupBy('code')
    ->havingRaw((sum(used_count) < global_max_uses  or sum(used_count) is null) and
   ( count(code) < max_users  or count(code) is null)
)->get();

如果您发现任何错误post他们在这里是为了帮助您