如何在 laravel 中按类别过滤 post?
How to filter post by category in laravel?
我目前正在尝试建立 3 个表之间的关系。
post
id
name
category
id
name
post_category
id
post_id
category_id
数据库
post
| 1 | post1 |
| 2 | post2 |
| 3 | post3 |
category
| 1 | cat1 |
| 2 | cat2 |
| 3 | cat3 |
post_category
| 1 | 1 | 1 |
| 2 | 2 | 1 |
| 3 | 3 | 2 |
| 3 | 2 | 2 |
| 3 | 1 | 3 |
型号 Post.php
public function getCategory()
{
return $this->belongsToMany(Category::class, 'post_category');
}
PostController.php
$data = Post::with('getCategory')->get();
它 returns 正确 post 列表。
现在我想按类别过滤 post。我试过了,但没用
$categoryId = [1,2];
$data = Post::with('getCategory')->whereHas('category', function ($query) use ($categoryId) {
$query->whereIn('id', $categoryId);
})->orderBy('id','DESC')->get();
请帮我
使用 Laravel 5.4
您应该将 getCategory()
函数重命名为 category()
。这使得关系名称更加直接,并且可能会解决您的问题。
那么,您应该可以调用 whereHas('category', ...)
。
如果它仍然不起作用,只需将 ->toSql()
链接到您的任何查询并以此方式调试实际查询。
显然一切都很好!
一个建议是在 belongsToMany
方法中再添加两个参数,例如:
public function getCategory()
{
return $this->belongsToMany(Category::class, 'post_category', 'post_id', 'category_id');
}
我目前正在尝试建立 3 个表之间的关系。
post
id
name
category
id
name
post_category
id
post_id
category_id
数据库
post | 1 | post1 | | 2 | post2 | | 3 | post3 | category | 1 | cat1 | | 2 | cat2 | | 3 | cat3 | post_category | 1 | 1 | 1 | | 2 | 2 | 1 | | 3 | 3 | 2 | | 3 | 2 | 2 | | 3 | 1 | 3 |型号 Post.php
public function getCategory() { return $this->belongsToMany(Category::class, 'post_category'); }PostController.php
$data = Post::with('getCategory')->get();它 returns 正确 post 列表。
现在我想按类别过滤 post。我试过了,但没用
$categoryId = [1,2]; $data = Post::with('getCategory')->whereHas('category', function ($query) use ($categoryId) { $query->whereIn('id', $categoryId); })->orderBy('id','DESC')->get();请帮我 使用 Laravel 5.4
您应该将 getCategory()
函数重命名为 category()
。这使得关系名称更加直接,并且可能会解决您的问题。
那么,您应该可以调用 whereHas('category', ...)
。
如果它仍然不起作用,只需将 ->toSql()
链接到您的任何查询并以此方式调试实际查询。
显然一切都很好!
一个建议是在 belongsToMany
方法中再添加两个参数,例如:
public function getCategory()
{
return $this->belongsToMany(Category::class, 'post_category', 'post_id', 'category_id');
}