【问题标题】:Laravel - Display number of articles with a specific tagLaravel - 显示具有特定标签的文章数量
【发布时间】:2017-04-23 17:19:04
【问题描述】:

我有以下输出所有标签名称的 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'];
}

【问题讨论】:

  • blog articles 表有一个名为 tag 的列” - 你的意思是 tag_id 对吗?
  • 如果你能更精确地展示你的模型和表格结构,那就太好了。
  • @imrealashu 编辑谢谢 :)
  • Tag 模型也是如此。
  • @imrealashu 完成

标签: php laravel laravel-5


【解决方案1】:

使用withCount()为每个标签获取带有计数文章的标签:

$tags = Tags::withCount('articles')->get();

如果您想在不实际加载关系的情况下计算关系结果的数量,您可以使用 withCount 方法,该方法会在结果模型上放置一个 {relation}_count

显示指定标签的文章数:

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

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

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

【讨论】:

  • 所以我相信从我需要创建一个外键开始?也许Admin 表中的tag 字段应该引用Tags 表中的ID 字段?
  • 我不知道你想用什么结构,这是你的决定。但是如果你想让我的答案中的代码工作,你需要定义标签和文章模型之间的hasMany()(一对多)或belongsToMany()(带有数据透视表的多对多)关系。
  • 很抱歉又问了一个愚蠢的问题,但是如果两个表没有通过外键连接,我可以在我的模型中拥有hasMany()belongsToMany() 关系吗?
  • 您可以跳过创建约束,但您仍然需要 hasMany() 的键和 belongsToMany() 的数据透视表(将有两个键)。
【解决方案2】:
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();

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-30
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-24
    • 1970-01-01
    • 2018-03-05
    相关资源
    最近更新 更多