问题描述
我想查找特定用户拥有的每匹马的份额(包括当用户拥有特定马匹的零份额时)。
我尝试了以下方法,但是当用户对特定马匹拥有零份额时,我无法检索到这种情况。
$userHorses = DB::table('orders')->join('shares','orders.id','=','shares.order_id')
->join('horses','horses.id','shares.horse_id')
->where('orders.user_id',$user_id)
->select('horses.name','horses.slug',DB::raw('count(*) as totalShares'))
->groupBy('horses.name','horses.slug')
->get();
return $userHorses;
解决方法
要检索所有具有用户共享数的马,您将需要使用条件聚集之类的左联接,
$userHorses = DB::table('horses h')
->leftJoin('shares s','h.id','=','s.horse_id')
->leftJoin('orders o','o.id','s.order_id')
->select('h.name','h.slug',DB::raw('sum(case when o.user_id = :user_id then 1 else 0 end) as totalShares',['user_id' => $user_id])
)
->groupBy('h.name','h.slug')
->get();