使用 Eloquent withCount () 来 count 对应关系的条数 | 您所在的位置:网站首页 › php分类条数 › 使用 Eloquent withCount () 来 count 对应关系的条数 |
文章转发自专业的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 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 实验室设备网 版权所有 |