Laravel 5 - 计算分配给博客中每个类别的帖子数

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)