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

Laravel Filament资源详情页实现Shopify式订阅历史表格展示

在Laravel Filament订阅详情页添加订阅历史表格(仿Shopify样式)

方案一:使用关联管理器(Relation Manager)(推荐,适合关联模型场景)

如果你的订阅历史是Subscription模型的关联数据(一个订阅对应多条历史记录),用Filament的Relation Manager是最便捷的方式:

  1. 确认模型关联
    在Subscription模型中定义与订阅历史模型的关联:
// app/Models/Subscription.php
public function subscriptionHistories()
{
    return $this->hasMany(SubscriptionHistory::class);
}
  1. 生成关联管理器
    执行Artisan命令生成对应的Relation Manager文件:
php artisan make:filament-relation-manager SubscriptionResource subscriptionHistories
  1. 配置表格样式与字段
    打开生成的SubscriptionHistoriesRelationManager.php文件,按照Shopify风格配置表格列、徽章、筛选器:
// app/Filament/Resources/SubscriptionResource/RelationManagers/SubscriptionHistoriesRelationManager.php
use Filament\Tables;
use Filament\Tables\Table;
use Filament\Resources\RelationManagers\RelationManager;

class SubscriptionHistoriesRelationManager extends RelationManager
{
    protected static string $relationship = 'subscriptionHistories';

    public function table(Table $table): Table
    {
        return $table
            ->recordTitleAttribute('event')
            ->columns([
                Tables\Columns\TextColumn::make('created_at')
                    ->label('时间')
                    ->dateTime('Y-m-d H:i:s')
                    ->sortable(),
                Tables\Columns\TextColumn::make('event')
                    ->label('事件类型')
                    ->badge()
                    ->color(fn(string $state): string => match($state) {
                        'activated' => 'success',
                        'cancelled' => 'danger',
                        'renewed' => 'warning',
                        default => 'gray',
                    }),
                Tables\Columns\TextColumn::make('details')
                    ->label('详情')
                    ->limit(50),
                // 根据需求添加更多列
            ])
            ->filters([
                Tables\Filters\SelectFilter::make('event')
                    ->options([
                        'activated' => '已激活',
                        'cancelled' => '已取消',
                        'renewed' => '已续费',
                    ]),
            ])
            ->defaultSort('created_at', 'desc');
    }
}
  1. 注册关联管理器
    在SubscriptionResource的getRelations()方法中注册管理器,详情页会自动生成标签页展示历史表格:
// app/Filament/Resources/SubscriptionResource.php
public static function getRelations(): array
{
    return [
        RelationManagers\SubscriptionHistoriesRelationManager::class,
    ];
}

方案二:直接嵌入详情页(适合非关联或自定义布局场景)

如果需要把表格直接嵌入详情页区块,而非标签页,可在详情页的Infolist中直接添加Table组件:

// app/Filament/Resources/SubscriptionResource.php
use Filament\Infolists\Components\Section;
use Filament\Tables;
use Filament\Tables\Table;

public static function infolist(Infolist $infolist): Infolist
{
    return $infolist
        ->schema([
            // 保留原有订阅详情字段
            Section::make('订阅基本信息')
                ->schema([
                    // ... 现有字段配置
                ]),

            // 添加订阅历史表格区块
            Section::make('订阅历史')
                ->schema([
                    Tables\Components\Table::make()
                        ->query(fn(\App\Models\Subscription $record) => \App\Models\SubscriptionHistory::where('subscription_id', $record->id))
                        ->columns([
                            Tables\Columns\TextColumn::make('created_at')
                                ->label('时间')
                                ->dateTime()
                                ->sortable(),
                            Tables\Columns\TextColumn::make('event')
                                ->label('事件类型')
                                ->badge(),
                            Tables\Columns\TextColumn::make('details')
                                ->label('详情'),
                        ])
                        ->defaultSort('created_at', 'desc')
                        ->paginationPageOptions([10, 25, 50])
                        ->striped(), // 开启条纹样式,贴近Shopify风格
                ]),
        ]);
}

样式优化提示

  • 用badge()给事件类型添加彩色标签,匹配Shopify状态标签风格
  • 开启striped()让表格行交替变色,提升可读性
  • 设置defaultSort按时间倒序,优先展示最新历史记录
  • 添加筛选器,方便快速查找特定类型的历史事件

内容的提问来源于stack exchange,提问作者Ronak Panchal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 08:07:42