【问题标题】:Laravel Count Multiple Tables In EloquentLaravel 在 Eloquent 中计算多个表
【发布时间】:2019-11-03 23:57:02
【问题描述】:

我正在尝试通过模型计算相关表但无法成功。

我有一个类别、问题和答案表。

我可以计算与某个类别相关的问题,但无法计算相关类别的答案。你可以认为它是一个论坛系统。

类别模型

public function questions(){
    return $this->hasMany('App\Question','category_id','id');
}

问题模型

public function answer()
{
    return $this->hasMany('App\Answer');
}

public function category()
{
    return $this->belongsTo('App\Category','category_id','id');
}

答案模型

public function question()
{
    return $this->belongsTo('App\Question','question_id','id');
}

我可以计算相关类别视图类别模型的问题,如下所示

public function questioncount(){
    return $this->questions()->where('status',1)->count();
}

在下面尝试计算答案,但没有运气;

public function answercount()
{
    return $this->questions()
        ->leftJoin('answers','answers.question_id','=','questions.id')
        ->count();
}

【问题讨论】:

  • 使用->groupBy('questions.id') 并尝试
  • 没用兄弟。

标签: laravel relationship


【解决方案1】:

你可以试试Has Many Through 关系。

所以让我们在 Category 模型中定义一个 Has Many Through 关系:

class Category
{
    public function answers()
    {
        return $this->hasManyThrough(Answer::class, Question::class);
    }
}

那么你当然可以得到这样的答案计数:

$question->answers()->count();

【讨论】:

  • 但我想我必须在答案和类别表之间建立关系。因为类别和答案之间没有关系,只有问题 - 答案和问题 - 类别之间的关系不是吗?当我尝试您的代码时,它给了我未知列'answers.question_answer_category_id 错误
  • 好的,我在hasthrough关系中发现了额外的外键谢谢兄弟。
【解决方案2】:

如果您想在不实际加载关系的情况下计算关系结果的数量,您可以使用 withCount 方法,该方法会在结果模型上放置一个 {relation}_count 列。例如:

 $answers = App\Question::withCount('answers')->get();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-27
    • 2016-11-03
    • 2019-02-07
    • 2016-11-19
    • 2016-08-12
    • 2015-02-02
    • 2021-06-13
    相关资源
    最近更新 更多