我理想地寻找类似的功能
load('relationship')
但是以相同的方式加载计数
withCount('relationship')
适用于急切加载。
我想它会被称为
loadCount('relationship')
从 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'];
这个解决方案对我来说非常有用:
在相关模型上创建一个新的 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;