我有一个表gifts_sent
,其中包含一个模型GiftSent
,并且包含以下列。
id
,gift_id
,sender_id
,receiver_id
注意:sender_id
和receiver_id
是外键。
假设身份1
的用户已发送了11份礼物,身份2
的用户已向其他用户发送了9份礼物等等。
如何使用laravel eloquent或query builder实现这一目标?
注意:它用于排名,即用户发送了大部分礼物。
我提出了以下逻辑,但不正确。
App\User::join('gift_sents', function($builder){
$builder->on('gift_sents.receiver_id', '=', 'users.id');
})
->select('users.*', DB::raw('COUNT(gift_sents.receiver_id) as total_posts'))
->groupBy('gift_sents.id')
->orderBy('total_posts', 'ASC')
->limit(3)->get();
答案 0 :(得分:0)
首先,您必须定义与User和GiftSent模型的关系。 获取已发送最大礼品数量的sender_id。使用关系('with')获取所有用户。
App\GiftSent::with('userRelationName')
->select('sender_id', DB::raw('COUNT(*) as giftCount'))
->groupBy('sender_id')
->orderBy(DB::raw('COUNT(*)'))
->get();
其他解决方案是使用连接,但这将是复杂和昂贵的。