You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel分页筛选报错:Closure无法转换为int的解决咨询

解决Laravel Ajax分页中"Object of class Closure could not be converted to int"错误

问题场景

实现房源筛选结果的分页功能时触发错误:Object of class Closure could not be converted to int。功能逻辑为选择标签后展示对应房源,通过Ajax、Laravel和jQuery实现,筛选功能正常,但点击分页按钮时报错。

前端分页调用代码

$(document).on('click', '.pagination a', function(event){
 event.preventDefault();
 var page = $(this).attr('href').split('page=')[1];
 getMoreHouses(page);
});

// 分页结果获取与渲染
function getMoreHouses(page)
{
    var hseurl=$("#url").val();
    var hsetag = $('input[class^="tagtitle"]').filter(":checked").val();

    $.ajax({
        type:"GET",
        url:'{{ route("rentalcategory.get-more-houses") }}' + "?page=" + page,
        data:{
            url:hseurl,
            rentaltag:hsetag,
        },
        success:function(data)
        {
            $('.showrentalhouses').html(data);
        }
    })
}

后端控制器原代码

public function get_more_houses(Request $request)
{
    if($request->ajax()){

        $hsedata=$request->all();

        $rentalcaturl=$hsedata['url'];
        
        $rentalcatcount=Rental_category::where(['rentalcat_url'=>$rentalcaturl,'status'=>1])->count();

        if($rentalcatcount>0){

            $rentalcategorydetails=Rental_category::rentalcategorydetails($rentalcaturl);

            $housescategory=Rental_house::whereIn('rentalcat_id',$rentalcategorydetails['catids'])
            ->where(['rental_status'=>1,'is_extraimages'=>1,'is_rentable'=>1])->orderby('id','DESC')->paginate(4);
            $rentalcategories=Rental_category::withCount('rentalhses')->get();

            $rentaltags=Rental_tags::with('tagshouse')->get();

            $rentallocations=Location::where(['status'=>1])->get();

            // 标签筛选逻辑
            if(isset($hsedata['rentaltag']) && !empty($hsedata['rentaltag'])){

                $hsetag_id = $hsedata['rentaltag'];

                    
                $housescategory
                    ->whereIn('id', function($q) use ($hsetag_id)
                {
                    $q
                    ->select('rental_id')
                    ->from('rentalhouse_tags')
                    ->where('tag_id', $hsetag_id);
                });

                
            }
        
            return view('Front.Rentalslisting.rentalhsesjson',compact('rentalcaturl','rentallocations','rentalcatcount','rentalcategorydetails','rentaltags','housescategory','rentalcategories'))->render();
        }
    }
}

错误原因

你先调用paginate(4)生成了LengthAwarePaginator分页实例,之后试图在该实例上链式调用查询构造器的whereIn方法。分页实例不支持直接追加查询条件,导致闭包无法被正确解析,触发类型转换错误。

解决方法

调整查询顺序:先构建完整的查询条件,再执行分页操作。

修改后的后端控制器代码

public function get_more_houses(Request $request)
{
    if($request->ajax()){

        $hsedata=$request->all();

        $rentalcaturl=$hsedata['url'];
        
        $rentalcatcount=Rental_category::where(['rentalcat_url'=>$rentalcaturl,'status'=>1])->count();

        if($rentalcatcount>0){

            $rentalcategorydetails=Rental_category::rentalcategorydetails($rentalcaturl);

            // 初始化查询构造器,暂不执行分页
            $housescategoryQuery = Rental_house::whereIn('rentalcat_id',$rentalcategorydetails['catids'])
                ->where(['rental_status'=>1,'is_extraimages'=>1,'is_rentable'=>1])
                ->orderBy('id','DESC');

            // 追加标签筛选条件
            if(isset($hsedata['rentaltag']) && !empty($hsedata['rentaltag'])){
                $hsetag_id = $hsedata['rentaltag'];
                $housescategoryQuery->whereIn('id', function($q) use ($hsetag_id)
                {
                    $q->select('rental_id')
                      ->from('rentalhouse_tags')
                      ->where('tag_id', $hsetag_id);
                });
            }

            // 最后执行分页
            $housescategory = $housescategoryQuery->paginate(4);

            $rentalcategories=Rental_category::withCount('rentalhses')->get();
            $rentaltags=Rental_tags::with('tagshouse')->get();
            $rentallocations=Location::where(['status'=>1])->get();
        
            return view('Front.Rentalslisting.rentalhsesjson',compact('rentalcaturl','rentallocations','rentalcatcount','rentalcategorydetails','rentaltags','housescategory','rentalcategories'))->render();
        }
    }
}

说明

  • 调整后,查询构造器会先整合所有筛选条件,再生成包含分页逻辑的SQL语句,避免了在分页实例上追加条件的错误。
  • 前端代码无需修改,分页参数page已正确传递,后端返回的视图会正常渲染分页链接。

内容的提问来源于stack exchange,提问作者stephen Weru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 09:34:53