return CouponModel::query()
->selectRaw('count(coupon_customer.id) as cnt,coupon.*')
->leftJoin('coupon_customer', function ($join) use($params) {
$join->on('coupon.id', '=', 'coupon_customer.coupon_id')
->where('coupon_customer.customer_id', $params['customer_id'] ?? 0);
})
->where(function ($query) use ($couponIds) {
$query->where('coupon.limit_store', CouponModel::LIMIT_STORE_NO)
->orWhereIn('coupon.id', $couponIds);
})
->groupBy('coupon.id')
->havingRaw('cnt < coupon.limit_total')
->paginate($params['size']);
近期忙疯就很少发了,记录一下新学到的联查方法,哈哈 这里只是实例,很多条件去掉了,简单记录一下这种写法。
selectRaw倒不是新学到的,而是join的闭包查询,一般都是只用join的联查,但是给联查的表再加条件的地方比较少,就用到了新的写法,看代码。
还有就是优惠券需要过滤掉达到自己领取次数的优惠券,开始的写法是分开写的还要单独过滤数据比较麻烦,分页的时候也比较麻烦,数据量大的时候就捉襟见肘了,这时候selectRaw和habingRaw两个写法的使用就很舒服了,这里只能用havingRaw,用having汇报错。
后面学习到不常用的写法还是要记录一下,不经常用就给忘了。
推荐