我理想地寻找像
这样的功能load('relationship')
但以相同的方式加载计数
withCount('relationship')
适用于急切加载。
我认为它将被称为loadCount('relationship')
答案 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()