使用 Eloquent withCount () 来 count 对应关系的条数 您所在的位置:网站首页 php分类条数 使用 Eloquent withCount () 来 count 对应关系的条数

使用 Eloquent withCount () 来 count 对应关系的条数

2024-04-13 10:37| 来源: 网络整理| 查看: 265

文章转发自专业的Laravel开发者社区,原始链接:learnku.com/laravel/t/2…

Eloquent 有一个鲜为人知的函数叫 withCount():它可以帮助获取包括远程一对多关系在内的对象关联的记录条数。接下来看示例。

在我们的示例小项目中,我们有三个模型:User,Post 以及 Comment。所有的关联关系都可以用这三个模型来举例描述,先看 app/User.php 模型:

public function posts() { return $this->hasMany(Post::class); } public function comments() { return $this->hasManyThrough(Comment::class, Post::class); }

现在,我们来尝试在页面上显示如下的表格 - 用户及他们的文章和评论的统计列表:

实现很简单,下面是控制器 UserController 的代码:

public function index() { $users = User::withCount(['posts', 'comments'])->get(); return view('users', compact('users')); }

传递到 withCount() 方法的每一个参数,最终都会在模型实例中创建一个参数名添加了 _count  后缀的属性。因此,在上面的例子中,可以通过访问 user-posts_count** 和 **user->comments_count 属性来获取统计数值。

然后,在我们的视图文件中,我们有:

User Posts Comments @foreach ($users as $user) {{ $user->name }} {{ $user->posts_count }} {{ $user->comments_count }} @endforeach

注意, withCount() 既可以处理 hasMany() 关系,也可以处理hasManyThrough().的第二级深度。

不仅如此,我们甚至可以在使用 withCount() 时指定关联模型的过滤条件。假设,我们有一个评论表(comments),包含一个审核状态(approved)的字段。下面的示例展示了如何对该字段进行过滤,甚至可以指定一个别名:

$users = User::withCount([ 'posts', 'comments', 'comments as approved_comments_count' => function ($query) { $query->where('approved', 1); }]) ->get();

如此,便可在试图中使用 $user->approved_comments_count 来展示统计数据。

若想了解更多关于 withCount() 方法的信息 – 可查看 Laravel 官方文档。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有