Laravel 在需要时通过另一个关系检索关系数据

问题描述 投票:0回答:2

我有三张桌子

问题表:

id
title
description

答案表:

id
answerbody
question_id

喜欢表:

id
answer_id

我想检索单个问题的详细信息以及所有答案和answer_count及其各自的喜欢(仅like_count)

我试过这个

public function show($id)
{
    return question::with(['answers','answers.likes'])->withCount(['answers'])->where('id',$id)- 
    >get();
}

如何返回点赞次数?

laravel eloquent relationship
2个回答
1
投票

如果您需要问题的所有答案以及他们的喜欢计数,您可以在

with()
子句中调用闭包,并将其相关的喜欢计数加载为

Question::with(['answers'=> function ($query) {
                $query->withCount('likes')
                      ->orderBy('likes_count', 'desc');
        }])
        ->withCount(['answers'])
        ->where('id',$id)
        ->get();

这样您还可以根据喜欢数对答案进行排序


0
投票

每个问题都有很多答案。因此,在问题模型中添加以下代码:

public function answer()
    {
        return $this->hasMany(Answer::class);
    }

每个答案都有很多人点赞。因此,在答案模型中添加以下代码:

public function likes()
    {
        return $this->hasMany(Like::class);
    }

现在您必须在问题模型中定义一个变量“getDataAttribute”,如下所示:

public function getDataAttribute()
    {
        return [
            'question' => $this,
            'answers' => $this->answers()->get(),
            'answer_count' => $this->answers()->get()->count(),
            'likes' => $this->answers()->likes()->get(),
        ];
    }

最后,在任何需要问题信息的地方,您只需调用:

$question->data

检索问题、点赞数和问题数。

© www.soinside.com 2019 - 2024. All rights reserved.