【发布时间】:2021-03-29 20:39:43
【问题描述】:
我有 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,
'post_tag',
'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', 'desc')->paginate(7);
return view('pages.postlist', ['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');
【问题讨论】:
-
在你的控制器中使用多个
where -
我需要从不同的表中获取数据。所以,我不明白如何在这里使用多个
where。 -
尝试使用
whereHas。相关问题:stackoverflow.com/questions/35478498/…。你也可以一起使用Query Builder+join+where
标签: php laravel has-and-belongs-to-many belongs-to