【问题标题】:Laravel count functionLaravel 计数功能
【发布时间】:2020-12-21 10:56:33
【问题描述】:

我有一个小型 lms 应用程序,其中包含几个模型和控制器,例如 Ecourse、Lesson 和 Lecture。

每门课可以有很多课,每课可以有很多课。

如果我想知道一门课程有多少课,我可以使用{{ $ecourse->lessons->count() }} 来完成,而且效果很好。

{{ $lesson->lectures->count() }} 相同,查看一节课有多少课。

但我真正想要的是显示 Ecourse 中的讲座数量。

我试过这个{{ $ecourse->lessons->lectures->count() }},但它当然不起作用。

我收到此错误消息:

此集合实例上不存在属性 [讲座]。

所以现在我迷路了。

我怎样才能做到这一点?

非常感谢

和平

编辑:

课程模型:

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

课程模型:

public function ecourse()
{
    return $this->belongsTo('App\Ecourse');
}

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

讲座模式:

public function lesson()
{
    return $this->belongsTo('App\Lesson');
}

谢谢!

【问题讨论】:

  • 你也可以添加你的模型关系

标签: php laravel count


【解决方案1】:

has-many-through 关系为通过中间关系访问远距离关系提供了便捷的捷径。在你的情况下,你可以这样使用:

Ecourse 模型定义lectures()

public function lectures()
{
     return $this->hasManyThrough('App\Lecture', 'App\Lesson');
}

传递给hasManyThrough 方法的第一个参数是我们希望访问的最终模型的名称,而第二个参数是中间模型的名称。

要计算讲座的次数,您只需这样做:

{{ $ecourse->lectures->count() }}

【讨论】:

  • 感谢@vinod 和 OMR。两种解决方案都有效,我决定使用 vinod 的。我希望我可以将这两个答案都标记为最佳解决方案!感谢你的宝贵时间。注意安全。和平
【解决方案2】:

尝试获取计数总和的关系...

$lectures_count=  $ecourse->lessons()->withCount('lectures')->get()->sum('lectures_count');

【讨论】:

  • 感谢@OMR!有效 !我已将整个代码插入到我的 index.blade 视图文件中。这是正确的方式吗?
  • 如果你像@vinod (has-many-through) 那样构建会更好,但我选择最简单的方法
猜你喜欢
  • 2019-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-04
  • 2018-09-08
  • 2015-07-16
相关资源
最近更新 更多