关于hasMany的withCount()
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于hasMany的withCount()相关的知识,希望对你有一定的参考价值。
我正试图在关系的关系上使用withCount()
。我得到的错误是Method IlluminateDatabaseQueryBuilder::forums.threads does not exist.
。
鉴于这些模型:
class Category extends Model
{
public function forums()
{
return $this->hasMany('AppForum');
}
}
class Forum extends Model
{
public function category()
{
return $this->belongsTo('AppCategory');
}
public function threads()
{
return $this->hasMany('AppPost')->orderByDesc('created_at');
}
}
在我的控制器中考虑以下内容:
public function index()
{
$categories = Category::with('forums')->withCount('forums.threads')->orderBy('order')->get();
return view('home', compact('categories'));
}
以下是我的观点:
@foreach($categories as $category)
{{ $category->title }}<br>
@foreach($category->forums as $forum)
{{ $forum->title }}<br>
{{ $forum->threads_count }}
@endforeach
@endforeach
我知道我可以简单地从控制器中删除withCount
并使用$forum->threads->count()
,但是可以按照我想要的方式查询计数吗?
如果是这样,怎么样?我希望通过加载计数尽可能快地加载计数(当然不加载所有实际的threads
)。
答案
在withCount()
中尝试closure
:
$categories = Category::with(['forums'=>function($q){
$q->withCount('threads');
}])->orderBy('order')->get();
另一答案
你不需要加载你可以使用的线程$forum->threads()->count()
它将返回线程的数量而不加载它们
以上是关于关于hasMany的withCount()的主要内容,如果未能解决你的问题,请参考以下文章