Laravel 5.2 - 按标签和顺序降序选择帖子

时间:2016-09-06 23:51:04

标签: php many-to-many laravel-5.2 relationship

我在我的Laravel项目中堆叠了由标签选择的帖子,并按降序排序。我想按特定标签显示帖子。我创建了一个PostTag模型,其关系为manyToMany。我还使用post_tagpost_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。请帮忙。

1 个答案:

答案 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