首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Laravel中逗号分隔的值中获取流行标记

从Laravel中逗号分隔的值中获取流行标记
EN

Stack Overflow用户
提问于 2020-08-31 13:58:50
回答 1查看 344关注 0票数 0

我有标签表和新闻表格。新闻表以tag_id表作为外键,如果新闻有多个标签,则以逗号分隔的值存储。我要去拿那些有更多新闻的标签。

例如:在上面的新闻表中:标签id 1共有5条新闻标签id 2共有4条新闻标签id 3共有3条新闻,标签id 4共有2条新闻。

因此,我想按以下顺序将流行标签从最高新闻计数获取到最低新闻计数:

  1. Politics
  2. Health
  3. Crime
  4. Corona病毒

我该怎么做?请帮帮我!

EN

回答 1

Stack Overflow用户

发布于 2020-09-05 13:19:32

在laravel中实现这一点的最好方法是使用多到多的关系。创建一个news_tag枢轴表,将news_id & tag_id作为列。然后在创建新闻时附加标签。让我与文章和标签分享一个例子。

代码语言:javascript
复制
class Article extends Model
{    
    public function tags(){
    return $this->belongsToMany(Tag::class);
}

}

然后您的标记模型:

代码语言:javascript
复制
class Tag extends Model{
  public function articles(){
    return $this->belongsToMany(Article::class);
  }
}

然后,您的枢轴表将如下所示:

代码语言:javascript
复制
class CreateArticleTagTable extends Migration
{

public function up()
{
    Schema::create('article_tag', function (Blueprint $table) {
        $table->id();
        $table->unsignedBigInteger('article_id');
        $table->unsignedBigInteger('tag_id');
        $table->timestamps();

        $table->foreign('article_id')
            ->references('id')
            ->on('articles')
            ->onDelete('cascade');

        $table->foreign('tag_id')
            ->references('id')
            ->on('tags')
            ->onDelete('cascade');    
    });
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
  {
    Schema::dropIfExists('article_tag');
  }
}

然后在控制器中附加标签。您将需要从标记表中获取标记id,并将其传递给视图,然后在存储函数上发布id,然后像这样将其附加到news_tag。

代码语言:javascript
复制
  public function store(Request $request)
{
    $this->validate($request, [
        'heading' => 'required|string|max:191',
        'tag_id' => 'required|integer',
    ]);

    if($request->isMethod('post')){
        $article = new Article;
        $article->heading = $request['heading'];
        $article->tag_id = $request['tag_id'];
        $article->save();
        //attach tags
        $article->tags()->attach(request('tag_id'));

    }
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63672222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档