我有四个表:用户,订单,份额和马匹。
一个用户有很多订单,一个订单有很多份额,一匹马有很多份额。
我想查找特定用户拥有的每匹马的份额(包括当用户拥有特定马匹的零份额时)。
我尝试了以下方法,但是当用户对特定马匹拥有零份额时,我无法检索到这种情况。
$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.id','horses.slug',DB::raw('count(*) as totalShares'))
->groupBy('horses.name','horses.id','horses.slug')
->get();
return $userHorses;
答案 0 :(得分:0)
要检索所有具有用户共享数的马,您将需要使用条件聚集之类的左联接,
$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.id',
'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.id','h.slug')
->get();