You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 00:38:24