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

例如:在上面的新闻表中:标签id 1共有5条新闻标签id 2共有4条新闻标签id 3共有3条新闻,标签id 4共有2条新闻。
因此,我想按以下顺序将流行标签从最高新闻计数获取到最低新闻计数:
我该怎么做?请帮帮我!
发布于 2020-09-05 13:19:32
在laravel中实现这一点的最好方法是使用多到多的关系。创建一个news_tag枢轴表,将news_id & tag_id作为列。然后在创建新闻时附加标签。让我与文章和标签分享一个例子。
class Article extends Model
{
public function tags(){
return $this->belongsToMany(Tag::class);
}}
然后您的标记模型:
class Tag extends Model{
public function articles(){
return $this->belongsToMany(Article::class);
}
}然后,您的枢轴表将如下所示:
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。
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'));
}
}https://stackoverflow.com/questions/63672222
复制相似问题