我有三张桌子
问题表:
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();
}
如何返回点赞次数?
如果您需要问题的所有答案以及他们的喜欢计数,您可以在
with()
子句中调用闭包,并将其相关的喜欢计数加载为
Question::with(['answers'=> function ($query) {
$query->withCount('likes')
->orderBy('likes_count', 'desc');
}])
->withCount(['answers'])
->where('id',$id)
->get();
这样您还可以根据喜欢数对答案进行排序
每个问题都有很多答案。因此,在问题模型中添加以下代码:
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
检索问题、点赞数和问题数。