我有以下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>
上面的代码在前端给出了以下内容:
现在代替现在是静态数字的3
,我想显示具有该给定标签的文章数量。
现在我的数据库是这样的,blog articles
存储在单独的表中,tags
存储在一个单独的表中。 blog articles
表有一个名为tag
的列,tags
表也有一个名为tag
的列。现在,这两个表都以变量的形式传递给视图:
$recentPost // Contains all the blog articles
$tag // Contains all the tags
现在,我如何动态显示标记为javascript
的文章数量?
附加信息
博客文章表:
标签表:
首页代码:
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'];
}
答案 0 :(得分:2)
$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();
我不确定它是否能完成工作,因为我不太确定结构。如果您收到任何错误,请告诉我。