Laravel Eloquent Lazy Eager Load Count

时间:2016-10-13 11:25:53

标签: laravel eloquent

我理想地寻找像

这样的功能
load('relationship')

但以相同的方式加载计数

withCount('relationship')

适用于急切加载。

我认为它将被称为loadCount('relationship')

3 个答案:

答案 0 :(得分:19)

从Laravel 5.2开始,此功能是内置的。

如果Post和Comment之间有hasMany关系,请执行:

<?php

$posts = App\Post::withCount('comments')->get();

foreach ($posts as $post) {
    echo $post->comments_count;
}

默认情况下,您甚至可以通过在模型中声明这一点来计算加载关系:

<?php

// Post model

protected $withCount = ['comments'];

答案 1 :(得分:13)

This solution对我很有用:

在相关模型上创建新的hasOne关系,并将原始选择添加到计数的查询中。例如,如果您想急切加载给定用户的任务数,请将其添加到用户模型:

public function taskCount()
{
    return $this->hasOne('App\Task')
    ->selectRaw('user_id, count(*) as count)
    ->groupBy('user_id');
}

然后急切地加载计数:

$user = User::where('email', $email)->with('taskCount)->first();

并按如下方式访问计数:

$taskCount = $user->task_count->count;

答案 2 :(得分:1)

<input type="text" class="fname"> <input type="text" class="fname"> <input type="text" class="fname"> <input type="text" class="fname"> Laravel 5.8

中可用
loadCount()

Docs