我在我的Laravel项目中堆叠了由标签选择的帖子,并按降序排序。我想按特定标签显示帖子。我创建了一个Post
和Tag
模型,其关系为manyToMany
。我还使用post_tag
和post_id
创建了一个数据透视表tag_id
。在PostsController中,我创建了tags()
方法:
public function tags($tagid)
{
$tag = $this->tags->find($tagid);
return view('frontend.posts.tag', compact('tag'));
}
并在视图中循环:
@foreach($tag->posts as $post)
{{ $post->title }}
....
@endforeach
这对我有用,但我需要按posts.created_at
按降序排序。如何使用Tag :: find($ id)进行查询,但是通过Posts表中的posts.created_at字段进行排序?这是我的Post和Tag模型,具有manyToMany关系:
class Post extends Model
{
.....
public function tags()
{
return $this->belongsToMany(Tag::class);
}
.....
和
class Tag extends Model
{
protected $fillable = ['name'];
public function posts()
{
return $this->belongsToMany(Post::class);
}
}
请问,如何按created_at
表中的posts
列按降序排列特定标记所选的帖子?我还想在降序中使用该查询中的paginate()metohd。请帮忙。
答案 0 :(得分:0)
我找到解决方案,这里是答案
对于Tag模型中的降序排序()方法应为:
public function posts()
{
return $this->belongsToMany(Post::class)->orderBy('created_at', 'desc');
}
TagController中的find()方法应该是这样的:
public function tags($tagid)
{
$tag = $this->tags->find($tagid)->posts()->paginate(12);
return view('frontend.posts.tag', compact('tag'));
}
并且在刀片中:
@foreach($tag as $post)
{{ $post->title }}
@endforeach