Php laravel分页不适用于搜索

Php laravel分页不适用于搜索,php,mysql,laravel,Php,Mysql,Laravel,我的控制器中有这个代码 if (request('tag')) { $Posts = Tags::where('name' ,request('tag'))->firstOrFail()->Posts; } else { $Posts = Blog::paginate(10); } return view('Panel.Posts',['Posts' => $Posts]);

我的控制器中有这个代码

  if (request('tag')) {
            $Posts = Tags::where('name' ,request('tag'))->firstOrFail()->Posts;
        } else {
            $Posts = Blog::paginate(10);
        }
        return view('Panel.Posts',['Posts' => $Posts]);
这是我的模型函数

public function tag(){
        return $this->belongsToMany(Tags::class,'Post_tag','Post_id');
    }
这是我正在创建的一个web应用程序,也是一个博客。 我正在尝试创建一个类别。 我想为我的搜索方法分页,但我做不到。 如果我使用paginate方法,它会说在paginate中找不到posts关系。 我试过这个:
$Posts=Tags::where('name',request('tag'))->firstOrFail()->paginate(10)->Posts

还有这个
$Posts=Tags::where('name',request('tag')->firstOrFail()->Posts->paginate(10)


有人能帮我解决这个问题吗?

确保标签在模型中有关系。也可以使用->帖子->帖子,但无论如何:

如果定义了或没有定义关系,则使用单独的查询是没有意义的。相反,你需要结合时间和地点

$posts = Blog::when(request('tag'), function ($q, $tagName) {
      return $q->whereHas('tag', function ($q) use ($tagName) {
         return $q->where('name', $tagName);
      });
   })->paginate(10);
  • 当填充时,如果条件匹配,则应用其中的内容。所以它只是“如果”的替代品。文件

  • WhereHas将检查关系模型是否存在,并允许您对该关系使用“where”(或其他查询)。文件

  • 如果你还想用“如果”而不是“什么时候”:

    试试我的代码

    
     $Posts = Blog::whereHas('tag', function (Builder $query) {
                        $query->where('name', request('tag'));
                    })->paginate(25);
    

    您可以在模型中的何处使用ha和查询生成器实例化关系。为什么在
    if-else
    语句中尝试从不同的表中获取行?看起来您需要在
    Blog
    模型上使用
    whereHas
    方法。类似这样的内容:
    Blog::whereHas('tags',function(Builder$query){$query->where('name',$request->get('tag');})->get()在这里查看更多:@OlegNurutdinov它的真命天子。谢谢你不客气:)
    
    
     $Posts = Blog::whereHas('tag', function (Builder $query) {
                        $query->where('name', request('tag'));
                    })->paginate(25);