Hol*_*olo 0 php count laravel-5
我想知道最简洁的方法是计算连接到我博客中某个类别的帖子数量.
以下是表关系的设置方式.
我所拥有的是从类别到Post模型的hasMany关系,如下所示:
在分类模型中
public function blog_posts()
{
return $this->hasMany('App\Http\Models\Blog_Post', 'category_id');
}
Run Code Online (Sandbox Code Playgroud)
并在Blog_Post模型中
public function blog_categories()
{
return $this->belongsTo('App\Http\Models\BlogCategories', 'category_id');
}
Run Code Online (Sandbox Code Playgroud)
实际上,我想要做的就是能够返回每个类别的帖子总数,如下所示.其中x是每个类别中的帖子数.
cat1(x)
cat2(x)
cat3(x)
然而,我不难想象,因为我只想要一个我不想检索记录的计数,因为它们不是必需的,我也不想创建超出必要的查询.
我还没有完成视图,但可能一个开始是通过循环中的类别来显示每个并同时添加计数?
@foreach ($categories as $category)
{!! $category->name !!} - {!! Count of posts here !!}
@endforeach
Run Code Online (Sandbox Code Playgroud)
希望这很清楚(ish)!
Mar*_*ean 10
急切加载控制器中的关系:
public function index()
{
$categories = Category::with('blog_posts')->get();
return view('categories.index', compact('categories'));
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以在视图中循环类别时使用关系count()上的方法blog_posts:
@foreach ($categories as $category)
<li>{{ $category->name }} ({{ $category->blog_posts->count() }})</li>
@endforeach
Run Code Online (Sandbox Code Playgroud)
编辑:从Laravel 5.3开始,你可以withCount()用来加载关系计数,即
$categories = Category::withCount('blog_posts')->get();
Run Code Online (Sandbox Code Playgroud)
这将通过一个属性提供计数:
foreach ($categories as $category) {
$blog_posts_count = $category->blog_posts_count;
}
Run Code Online (Sandbox Code Playgroud)