子表:
goods_sku_log
主表
goods_sku
查询 有两条goods_sku_log
记录以上的数据
laravel 实现
一种count(*)实现方式 (数据忽略)
$visits = DB::table('visits')
->select('ip_address',DB::raw('count(*) as total'))
->where('timestamp', '>=',\Carbon\Carbon::now()->startOfDay())
->groupBy('ip_address')
->orderBy('total', 'desc')
->get();
优雅一点的实现方案
$goodsSku = GoodsSku::whereHas('goods_sku_log',function ($query){
$query->havingRaw('count(*) >= 1')->groupBy('id');
})
->with('goods_sku_log')
->orderBy('created_at', 'desc')
->limit(5)
->get();
having
通常用在 groupBy
实现的SQL:
select
*
from
`goods_sku`
where
exists (
select
*
from
`goods_sku_log`
where
`goods_sku`.`id` = `goods_sku_log`.`goods_sku_id`
group by
`id`
having
count(*) >= 1
)
and `goods_sku`.`deleted_at` is null
order by
`created_at` desc
limit
5