为了账号安全,请及时绑定邮箱和手机立即绑定

laravel,用不同的过滤器过滤多对多的关系

laravel,用不同的过滤器过滤多对多的关系

PHP
HUH函数 2022-07-02 16:47:07
我正在用 laravel 建立一个网站。我使用这些模型:邮政国家标签城市标签类别标签一个帖子可以有很多个countrytags,citytags反之亦然categorytags。我想按标签搜索帖子。我使用这个功能:  public function blogsearchresults(Request $request)        {               $attributes=request()->validate([                'countrytag_id'=>'required_without_all:citytag_id,categorytag_id',                'citytag_id'=>'required_without_all:countrytag_id,categorytag_id',                'categorytag_id'=>'required_without_all:countrytag_id,citytag_id'            ]);            $posts=Post::all();            if($request->has('countrytag_id')) {                $countryid=$attributes['countrytag_id'];                $posts =$posts->whereHas('countrytags', function ($query) use ($countryid){                $query->wherein('countrytag_id', $countryid);                 });            }            if($request->has('citytag_id')) {                $cityid=$attributes['citytag_id'];                $posts=$posts->whereHas('citytags', function ($query2) use ($cityid){                $query2->wherein('citytag_id', $cityid);                 });            }            if($request->has('categorytag_id')) {                $categoryid=$attributes['categorytag_id'];                $posts=$posts->whereHas('categorytags', function ($query3) use ($categoryid){                $query3->wherein('categorytag_id', $categoryid);                  });            }                    $posts=$posts->paginate();            return view('pages.blog.blogsearchresults', compact('posts'));        }但我得到这个错误:Method Illuminate\Database\Eloquent\Collection::whereHas does not exist.你能帮我解决这个问题吗?谢谢
查看完整描述

1 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

该方法all()返回一个集合,您不能在其上使用查询构建器方法。(同样当您查询构建时,您不需要一遍又一遍地分配值 $posts)


public function blogsearchresults(Request $request)

    {   

        $attributes = request()->validate([


            'countrytag_id'=>'required_without_all:citytag_id,categorytag_id',

            'citytag_id'=>'required_without_all:countrytag_id,categorytag_id',

            'categorytag_id'=>'required_without_all:countrytag_id,citytag_id'

        ]);

        $postQuery = Post::query();

        if($request->has('countrytag_id')) {

            $countryid = $attributes['countrytag_id'];

            $postQuery->whereHas('countrytags', function ($query) use ($countryid){

            $query->wherein('countrytag_id', $countryid); 

            });

        }

        if($request->has('citytag_id')) {

            $cityid = $attributes['citytag_id'];

            $postQuery->whereHas('citytags', function ($query2) use ($cityid){

            $query2->wherein('citytag_id', $cityid); 

            });

        }

        if($request->has('categorytag_id')) {

            $categoryid = $attributes['categorytag_id'];

            $postQuery->whereHas('categorytags', function ($query3) use ($categoryid){

            $query3->wherein('categorytag_id', $categoryid);  

            });

        }        

        $posts = $postQuery->paginate();


        return view('pages.blog.blogsearchresults', compact('posts'));


    }


查看完整回答
反对 回复 2022-07-02
  • 1 回答
  • 0 关注
  • 115 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号