PHP Filament v3中如何同时提取firstname和lastname作为选项值
解决Filament v3 SelectFilter显示参与者全名的问题
直接修改options里的字段提取逻辑,将单字段的firstname替换为拼接后的全名即可:
SelectFilter::make('participant_id') ->attribute('participant_id') ->label(__('messages.participant_full_name')) // 建议同步修改标签为全名 ->options( Participant::query() ->pluck(DB::raw("CONCAT(firstname, ' ', lastname)"), 'id') ->toArray() ),
两种实现方式说明:
- 数据库层面拼接(推荐):用
DB::raw直接在查询时拼接字段,性能更优,适合数据量较大的场景 - 集合层面处理:如果需要处理空值(比如
lastname可能为空),可以用集合的mapWithKeys方法做二次处理:
Participant::all() ->mapWithKeys(function ($participant) { return [$participant->id => trim($participant->firstname . ' ' . $participant->lastname)]; }) ->toArray()
注意事项:
- 移除不必要的
array_unique:参与者的id是唯一主键,即使全名重复,对应的id不同也属于独立选项,无需去重;若确实需要去重,建议在查询阶段添加->distinct() - 同步更新标签翻译:将原来的
participant_model_firstname替换为对应全名的翻译键,保证界面显示逻辑统一
内容的提问来源于stack exchange,提问作者stevan06
相关产品推荐
相关产品推荐

