Mysql Laravel 5.1通过拥有或拥有使用计数、总和、分组

Mysql Laravel 5.1通过拥有或拥有使用计数、总和、分组,mysql,laravel,orm,query-builder,Mysql,Laravel,Orm,Query Builder,请帮助,我如何将这些代码传输到查询生成器 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()

请帮助,我如何将这些代码传输到查询生成器

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) ) ;
选择*,
总和(已用计数)、计数(代码)
从促销代码pc
左侧加入pc上的促销代码用户pcu.id=pcu.`促销代码id`
左键连接pc上的促销代码类型pct.`促销代码类型\U id`=pct.id
其中(pc.expiration\u date>=CURDATE()或pc.expiration\u date为空)和
(pct.expiration\u date>=CURDATE()或pct.expiration\u date为空)
按代码分组
(sum(used_count)

谢谢

我无法测试该查询,所以我在运行中尝试了一些东西

$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();
$promo=DB::table('promo_code'))
->选择('*',DB::raw('SUM(used_count),count(code)'))
->leftjoin('promo\u code\u user'、'promo\u code.id'、'='、'promo\u code\u user.promo\u code\u id')
->leftjoin('promo_code_types'、'promo_codes.promo_code_type_id'、'='、'promo_code_types.id')
->其中(函数($query){
$query->where('promo_code.expiration_date','>=',DB::raw('curdate()'))
->或wherenull(“促销代码、到期日”);
})
->其中(函数($query){
$query->where('promo\u code\u types.expiration\u date','>=',DB::raw('curdate()'))
->或wherenull(“促销代码类型、到期日”);
})
->groupBy('代码')
->havingRaw((sum(used_count)get();

如果您发现任何错误,请将其发布到此处以帮助您

我无法测试查询,因此我尝试了一些动态操作

$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();
$promo=DB::table('promo_code'))
->选择('*',DB::raw('SUM(used_count),count(code)'))
->leftjoin('promo\u code\u user'、'promo\u code.id'、'='、'promo\u code\u user.promo\u code\u id')
->leftjoin('promo_code_types'、'promo_codes.promo_code_type_id'、'='、'promo_code_types.id')
->其中(函数($query){
$query->where('promo_code.expiration_date','>=',DB::raw('curdate()'))
->或wherenull(“促销代码、到期日”);
})
->其中(函数($query){
$query->where('promo\u code\u types.expiration\u date','>=',DB::raw('curdate()'))
->或wherenull(“促销代码类型、到期日”);
})
->groupBy('代码')
->havingRaw((sum(used_count)get();

如果您发现任何错误,请将其张贴在此处,以帮助您

小心,您同时使用了“和”字符,什么将以错误结束。我将它们替换为它工作正常,但我会导致另一个问题,我不能使用带havingRaw的paginate。如果您将get()替换为paginate(),这是错误消息?是的,我刚从stackoverflow检查过,知道不能使用paginate和querry,只是修复了。谢谢你小心,你同时使用了'and'字符,什么会以错误告终。我替换了它们。它很好,但我造成了另一个问题,我不能用havingRaw来使用paginate,如果你用paginate()替换get(),这是错误消息?是的,我刚从stackoverflow检查过,知道不能用带有query的paginate,刚刚修好。非常感谢。