Filament 3:如何在表格汇总器中获取行记录?
解决Filament 3表格Summarizer中$record为空的问题
问题本质
这是Filament组件的设计预期行为,并非bug:
formatStateUsing是表格的行级渲染回调,作用是处理单条数据的显示逻辑,所以会传入当前行的$record参数。- 而
Summarizer是针对整个表格数据集的汇总工具,它的using闭包从设计上就不提供单行$record参数——你代码里手动添加的$record属于未定义参数,因此为空。
正确实现方式
如果只是对total字段求和,直接用Filament内置的sum汇总器即可,无需自定义闭包:
Tables\Columns\TextColumn::make('total') ->label('Total') ->summarize(Summarizer::make()->sum());
如果需要自定义汇总逻辑,using闭包的有效参数只有Table $table(用于获取整个表格的数据集),去掉多余的$record参数:
Tables\Columns\TextColumn::make('total') ->label('Total') ->summarize(Summarizer::make() ->using(function (Table $table) { return $table->getRecords()->sum('total'); }) );
核心逻辑区分
- 行级处理(如
formatStateUsing):聚焦单条数据,可获取当前行$record。 - 全局汇总(如
Summarizer):聚焦整个数据集,仅能获取表格/查询对象,无法拿到单行记录。
内容的提问来源于stack exchange,提问作者Gzai Kun
相关产品推荐
相关产品推荐

