如何在 Laravel 中同时按当前标签和类别获取帖子?

问题描述

我有 Post、Tag 和 Category 模型。我知道如何按标签或按类别获取帖子。但我需要同时(一次)按所选标签和类别获取帖子。有人可以帮忙吗?我使用 Laravel 8。

后模型

class Post extends Model
{
    public function category()
    {
        return $this->belongsTo(Category::class);
    }

    public function tags()
    {
        return $this->belongsToMany(
            Tag::class,'post_tag','post_id','tag_id'
        );
    }
}

标签模型

class Tag extends Model
{
    public function posts()
    {
        return $this->belongsToMany(
            Post::class,'tag_id','post_id'
        )->withTimestamps();
    }
}

类别模型

class Category extends Model
{
    public function posts()
    {
        return $this->hasMany(Post::class);
    }
}

发布控制器的方法

class PostController extends Controller
{
    public function show($slug)
    {
        $post = Post::where('slug',$slug)->orderBy('date','desc')->firstOrFail();
        return view('pages.post',compact('post'));
    }

    public function tag($slug)
    {
        $tag = Tag::where('slug',$slug)->firstOrFail();
        $posts = $tag->posts()->orderBy('date','desc')->paginate(7);
        return view('pages.postlist',['posts'  =>  $posts]);
    }

    public function category($slug)
    {
        $category = Category::where('slug',$slug)->firstOrFail();
        $posts = $category->posts()->orderBy('date',['posts'  =>  $posts]);
    }
}

路线

Route::get('/posts/{slug}','App\Http\Controllers\PostController@show')->name('post.show');
Route::get('/posts/tag/{slug}','App\Http\Controllers\PostController@tag')->name('ptag.show');
Route::get('/posts/category/{slug}','App\Http\Controllers\PostController@category')->name('pcategory.show');

解决方法

您可能想要使用 whereHas

$categoryId = 1;
$tagId = 2;

Post::whereHas('category',function ($query) use ($categoryId) {
    $query->whereKey($categoryId);
})->whereHas('tags',function ($query) use ($tagId) {
    $query->whereKey($tagId);
})->get();

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...