我试图在关系关系上使用withCount()
。我得到的错误是Method Illuminate\Database\Query\Builder::forums.threads does not exist.
。
鉴于这些模型:
class Category extends Model
{
public function forums()
{
return $this->hasMany('App\Forum');
}
}
class Forum extends Model
{
public function category()
{
return $this->belongsTo('App\Category');
}
public function threads()
{
return $this->hasMany('App\Post')->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
)。
答案 0 :(得分:3)
在withCount()
内尝试closure
:
$categories = Category::with(['forums'=>function($q){
$q->withCount('threads');
}])->orderBy('order')->get();
答案 1 :(得分:-1)
你不需要加载你可以使用的线程$forum->threads()->count()
它将返回线程计数而不加载它们