通过相关表计数雄辩地获取

qltillow  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(320)

我为拉威尔创造了信使。现在我想列出用户参与的所有线程,每个线程中都有消息计数。我要数到 where 子句,因为我只想显示这些线程,其中包含消息。
我当前的查询: $threads = Participant::with('thread.messages') -> where('user_id', Auth::user() -> id) -> get(); 参与者:

public function user()
{
    return $this -> hasOne(User::class, 'id', 'user_id');
}
public function thread()
{
    return $this -> hasOne(Thread::class, 'id', 'thread_id');
}

线程:

public function participants()
{
    return $this -> hasMany(Participant::class, 'thread_id', 'id');
}
function messages()
{
    return $this -> hasMany(Message::class, 'thread_id', 'id');
}

信息:

function user()
{
    return $this -> belongsTo(User::class, 'user_id', 'id');
}

谢谢!

uoifb46i

uoifb46i1#

尝试使用 withCount 对于线程消息:

$threads = Participant::withCount(['thread.messages as message_count'])
                      ->where('user_id', auth()->id())
                      ->having('message_count', '>', 0)
                      ->get();
ghhaqwfi

ghhaqwfi2#

你可以用 has 为了 messages 与检查线程的关系有消息。之后,您需要使用 whereHas 最后使用 withCount 用于计算线程中的消息。

$threads = Thread::has('messages')
                    ->whereHas('participants', function($query){
                        return $query->where('user_id', Auth::user()->id);
                    })->withCount('messages')->get();

打印数据

foreach($threads as $thread){
    dd($thread->messages_count);
}

注意:您的关系名称 threadParticipant 模型应该是 belongsTo 相反 hasOne .

相关问题