php - 计算在 Laravel 中有关系的关系
问题描述
使用 Laravel Eloquent ORM 系统,我创建了以下模型:
/**
* @property int $id
*/
class Category extends Model
{
public function questions()
{
return $this->hasMany(Question::class);
}
}
/**
* @property int $id
* @property int $category_id
*/
class Question extends Model
{
public function answers()
{
return $this->hasMany(Answer::class);
}
}
/**
* @property int $id
* @property int $question_id
*/
class Answer extends Model {}
现在我正在尝试加载以下值:
- 所有类别
- 每个类别的问题数量
- 每个类别的已回答问题数量
我已经使用以下代码解决了 1 和 2:
$categories = Category
::withCount('questions')
->get();
$vars = ['categories' => $categories];
对于第三个值,我尝试了这样的方法(不起作用):
$categories = Category
::withCount(['questions', 'questions as answered_questions' => function ($query) {
$query->select()
->from('answers')
->whereRaw('answers.question_id = questions.id');
}])
->get();
如何有效地计算具有一个或多个答案的问题数量?
解决方案
你可以试试has
类别模型
class Category extends Model
{
public function questions()
{
return $this->hasMany(Question::class);
}
function answers()
{
return $this->hasManyThrough(Answer::class, Question::class);
}
}
获取数据
$categories = Category::withCount('questions')->has('answers')->get();
foreach($categories as $category){
$category->name." - ". $category->questions_count;
}
这questions_count
是对该类别至少有一个答案的总问题
推荐阅读
- javascript - 在加入时向成员发送消息
- android - 我要创建一个从手机屏幕底部打开的对话框(Android Studio),但我不知道它的名称.. 描述中的图像
- java - 发送附件 /w JavaMail Android Studio
- javascript - 交互式按钮不会像我想要的那样隐藏图表
- timezone - 更改雪花中默认时间戳列的时区
- r - 将多个 xlsx 文件导入一个数据集的 R 代码
- rest - 使用 REST 检索共享点文档库中子文件夹中的所有文件
- javascript - animationEnd Eventlistener 触发多次
- python - 如何用 Pandas 组内的前 3 行(30 分钟间隔)的中位数替换高于阈值的值?
- javascript - next.js SSG 模式下基于光标的分页的解决方法