如何在FilamentPHP v3资源表中将Eloquent模型单列拆分为两列?
解决FilamentPHP v3中拆分数据库列展示的问题
你遇到的问题是因为TextColumn::make()的参数是列的唯一标识,重复使用同一个标识(比如scode)会导致后定义的列覆盖前一个,所以只显示一列。不需要新增数据库列,有两种简单的解决方法:
方法一:直接在面板列中处理截取逻辑
给两个列设置不同的唯一标识,通过state()闭包从原字段截取对应内容:
TextColumn::make('scode_first_5') ->label('前5位编码') // 自定义面板上显示的列标题 ->state(function (Model $rec) { // 截取scode的前5个字符 return substr($rec->scode, 0, 5); }), TextColumn::make('scode_last_5') ->label('后5位编码') ->state(function (Model $rec) { // 从第5位开始截取到末尾(因字段固定10位,正好是后5个字符) return substr($rec->scode, 5); }),
方法二:利用模型访问器封装逻辑
在对应模型中定义两个访问器,把截取逻辑放在模型层,面板中直接调用即可:
第一步:在模型中添加访问器
// 你的模型文件(比如App/Models/YourModel.php) public function getScodeFirst5Attribute() { return substr($this->scode, 0, 5); } public function getScodeLast5Attribute() { return substr($this->scode, 5); }
第二步:在面板中调用访问器
TextColumn::make('scode_first_5')->label('前5位编码'), TextColumn::make('scode_last_5')->label('后5位编码'),
两种方法都能实现需求,方法二更符合代码分层的原则,方法一则更直接,根据你的习惯选择即可。
内容的提问来源于stack exchange,提问作者user1729972
相关产品推荐
相关产品推荐

