/admin/farm-crops 页面报错后台作物管理页面 /admin/farm-crops 访问时出现 TypeError 错误:
TypeError: "Dcat\Admin\Grid\Filter\Where::__construct(): Argument #2 ($query) must be of type Closure, string given, called in /var/www/html/vendor/dcat/laravel-admin/src/Grid/Filter.php on line 789"
错误发生在 FarmCropController.php 第139行,问题是 $filter->where() 方法的参数顺序不正确。
$filter->where('final_output_amount', '产量状态', function ($query) {
// 查询逻辑
})->select([...]);
根据 Dcat Admin 文档,where 方法的正确参数顺序应该是:
$filter->where($column, \Closure $callback, $label = '')
修改 app/Module/Farm/AdminControllers/FarmCropController.php 文件中的两个 where 过滤器:
$filter->where('final_output_amount', '产量状态', function ($query) {
// ...
}, '产量状态')->select([...]);
$filter->where('data_completeness', '数据完整性', function ($query) {
// ...
}, '数据完整性')->select([...]);
$filter->where('output_status', function ($query) {
$value = $this->input;
if ($value == 'has_amount') {
$query->whereNotNull('final_output_amount');
} elseif ($value == 'no_amount') {
$query->whereNull('final_output_amount');
}
}, '产量状态')->select([
'has_amount' => '已确定产量',
'no_amount' => '未确定产量'
]);
$filter->where('data_completeness', function ($query) {
$value = $this->input;
if ($value == 'complete') {
$query->whereNotNull('final_output_item_id')
->whereNotNull('final_output_amount')
->where('growth_stage', GROWTH_STAGE::MATURE->value);
} elseif ($value == 'incomplete_mature') {
$query->where('growth_stage', GROWTH_STAGE::MATURE->value)
->where(function ($q) {
$q->whereNull('final_output_item_id')
->orWhereNull('final_output_amount');
});
} elseif ($value == 'missing_amount') {
$query->whereNotNull('final_output_item_id')
->whereNull('final_output_amount');
}
}, '数据完整性')->select([
'complete' => '数据完整(成熟期)',
'incomplete_mature' => '数据不完整(成熟期)',
'missing_amount' => '缺少产量'
]);
where 方法的参数顺序从 (field, label, callback) 改为正确的 (field, callback, label)output_status,为第二个过滤器使用 data_completeness✅ 页面可以正常加载,不再出现 TypeError 错误
✅ 筛选器正常显示,包含"产量状态"和"数据完整性"选项
✅ 筛选功能正常工作,可以按"未确定产量"进行筛选
✅ 筛选结果正确,只显示符合条件的记录
✅ URL 参数正确传递(output_status=no_amount)
3439d267app/Module/Farm/AdminControllers/FarmCropController.phpwhere($column, \Closure $callback, $label = '')$this->input 获取用户输入值