Rappasoft Datatables v1日期过滤器配置报错求助
在Rappasoft Datatables v1中配置日期过滤器的解决方案
你遇到的array_sum(): Argument #1 ($array) must be of type array, bool given错误,核心原因是Rappasoft Datatables的日期过滤器默认返回包含start和end键的数组(对应日期范围选择的起止值),而非单个日期字符串,直接用where('someDate', $type)会导致查询逻辑异常,触发内部类型错误。
下面是正确的配置和修复步骤:
1. 确保过滤器类型正确
先在Datatable类的filters()方法中,将someDate声明为日期类型过滤器:
public function filters(): array { return [ // 其他过滤器配置... 'someDate' => DateFilter::make('目标日期'), ]; }
2. 调整查询逻辑处理日期范围
日期过滤器返回的数组格式为['start' => 'YYYY-MM-DD', 'end' => 'YYYY-MM-DD'],需要用范围查询匹配:
public function query(): Builder { return Model::query() ->when($this->getFilter('someDate'), function ($query, $dateRange) { $query->whereBetween('someDate', [$dateRange['start'], $dateRange['end']]); }); }
3. 特殊场景:单个日期匹配
如果业务需要匹配某一天而非范围,可先判断返回值结构再处理:
public function query(): Builder { return Model::query() ->when($this->getFilter('someDate'), function ($query, $dateValue) { if (is_array($dateValue)) { $query->whereBetween('someDate', [$dateValue['start'], $dateValue['end']]); } else { $query->whereDate('someDate', $dateValue); } }); }
错误根源补充
Rappasoft Datatables的日期过滤器前端默认是范围选择器,因此getFilter('someDate')返回数组。你之前的代码把数组直接传入where条件,导致Eloquent在处理查询时内部调用数组操作函数时,收到的是where语句返回的bool值,最终抛出类型错误。
内容的提问来源于stack exchange,提问作者Sead Silajdzic
相关产品推荐
相关产品推荐

