Laravel - 显示具有特定标签的文章数量

时间:2017-04-23 08:54:48

标签: php laravel laravel-5

我有以下foreach循环输出所有标记名称:

<section class="popular-tags-section">
    <ul class="popular-tags-listings">
        @foreach($tags as $tag)  
          <li><a href="">{{ $tag->tag }}(3)</a></li>
        @endForEach   
    </ul>
</section>

上面的代码在前端给出了以下内容:

tags

现在代替现在是静态数字的3,我想显示具有该给定标签的文章数量。

现在我的数据库是这样的,blog articles存储在单独的表中,tags存储在一个单独的表中。 blog articles表有一个名为tag的列,tags表也有一个名为tag的列。现在,这两个表都以变量的形式传递给视图:

$recentPost // Contains all the blog articles
$tag // Contains all the tags

现在,我如何动态显示标记为javascript的文章数量?

附加信息

博客文章表:

enter image description here

标签表:

enter image description here

首页代码:

class PagesController extends Controller {

    public function index() {
        // Grap the latest post .. the last 10 :)
        $recentPost = Admin::orderBy('created_at' , 'desc')->take(10)->get();
        $tags = Tags::all();;
        return view('pages.index')->with('recentPost' , $recentPost)->with('tags' , $tags );
    }

}

博客文章模态:

class Admin extends Model {

    public $table = "admin";
    // public $timestamps = false;
    protected $fillable = [
        'title',
        'description',
        'keywords',
        'blog_content',
        'tag',
        'slug',
        'filePath'
    ];

}

标签模态:

class Tags extends Model {
    public $table = "tags";
    public $timestamps = false;
    protected $fillable = ['tag'];
}

2 个答案:

答案 0 :(得分:2)

使用withCount()

为每个代码获取带有计数文章的标签
$tags = Tags::withCount('articles')->get();
  

如果您想要计算关系中的结果数而不实际加载它们,您可以使用withCount方法,该方法会在生成的模型上放置{relation}_count

显示指定标签的文章数量:

{{ $tag->tag }} ({{ $tag->articles_count }})

这将与Tag模型中正确定义的articles关系一起使用。这里最好的选择是多对多,所以你必须有一个数据透视表和articles关系定义如下:

public function articles()
{
    return $this->belongsToMany(Article::class);
}

答案 1 :(得分:1)

class Tags extends Model {
public $table = "tags";
public $timestamps = false;
protected $fillable = ['tag'];

public function posts()
{
    return $this->belongsToMany(Post::class);
}}

在你的控制器中,你会做这样的事情。

Tag::withCount('posts')->get();

我不确定它是否能完成工作,因为我不太确定结构。如果您收到任何错误,请告诉我。