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

Livewire中使用whereIn时出现Invalid parameter number错误如何解决

问题原因
  1. 参数类型错误:Laravel的whereIn方法要求第二个参数传入一维数组,你代码中两处调用whereIn('id', [$this->arr])时,给本身已经是一维数组的$this->arr额外套了一层数组括号,导致最终传入的是二维数组,查询构建器解析参数时出错,触发Invalid parameter number报错,同时你看到SQL语句中仅出现了第一个ID值,就是二维数组解析异常导致的。
  2. 数组未重置的潜在问题:$this->arr没有在每次触发筛选时清空,多次操作后旧的station ID会持续累积在数组中,导致筛选结果不符合预期。
  3. 空数组查询风险:若$this->arr为空时执行whereIn,会触发SQL语法错误,你当前的when条件仅判断了$this->filters['dayparts'],没有判断数组是否为空。
解决方法

直接修正两处whereIn的传参逻辑,同时补充数组重置和非空判断即可:

修正后的filtru方法代码

public function filtru($id){
    $this->filters['dayparts'] = array_filter($this->filters['dayparts']);
    // 每次筛选前清空数组,避免旧数据累积
    $this->arr = [];

    $dayp = DaypartStation::whereIn('daypart_id', array_keys($this->filters['dayparts']))->get();
    foreach($dayp as $day){
        $this->arr[] = $day->station_id;
    }

    // 去掉$this->arr外层多余的数组括号
    $toate = Station::whereIn('id', $this->arr)->get();
}

修正后的render方法代码

public function render()
{
    return view('livewire.create-workbooks-table', [
        'stations' => Station::
            // 新增非空判断,避免空数组执行whereIn报错
            when($this->filters['dayparts'] && !empty($this->arr), function($query){
                // 去掉$this->arr外层多余的数组括号
                $query->whereIn('id', $this->arr);
            })
            ->search($this->search)
            ->orderBy($this->sortBy, $this->sortDirection)
            ->latest()
            ->paginate($this->perPage), 
    ]);
}

内容的提问来源于stack exchange,提问作者Alexandra Claudia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:39:03