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

Filament表格小部件自动更新失效,如何实现60秒数据刷新?

问题

我通过服务调用API获取数据,希望数据每60秒更新一次。我知道小部件默认每10秒更新,但初始加载后数据似乎从未更新。我尝试添加->poll('60s'),但API从未再次被调用。

当前我的TopPages小部件代码如下:

public function table(Tables\Table $table): Tables\Table
{
    return $table
        ->query(TopPage::query())
        ->columns([
            TextColumn::make('page')
                ->label('Page')
                ->getStateUsing(fn ($record) => $record['page']),
            TextColumn::make('visitors')
                ->label('Visitors')
                ->getStateUsing(fn ($record) => number_format($record['visitors'])),
            TextColumn::make('pageviews')
                ->label('Page Views')
                ->getStateUsing(fn ($record) => number_format($record['pageviews'])),
        ]);
}

TopPage模型代码如下:

use Sushi;

protected $rows;

public function getRows(): array
{
    $plausibleAnalyticsService = new PlausibleAnalyticsService();

    $topPages = $plausibleAnalyticsService->fetchTopPages();

    Log::info('TopPage model getRows method called');

    return $topPages;
}
解决方法

1. 正确配置表格轮询

确保->poll('60s')方法正确追加到表格的链式调用中,位置不影响功能,只要属于表格实例的链式调用即可:

public function table(Tables\Table $table): Tables\Table
{
    return $table
        ->query(TopPage::query())
        ->poll('60s') // 添加轮询规则
        ->columns([
            // 列定义保持不变
        ]);
}

2. 处理Sushi模型的缓存问题

你使用的Sushi包默认会缓存getRows()的返回结果,这会导致即使表格发起轮询请求,模型也不会重新调用API拉取新数据。可以通过两种方式解决:

方式一:设置缓存过期时间

在TopPage模型中添加$cacheExpiration属性,将缓存有效期设为60秒,和轮询周期对齐:

use Sushi;

protected $rows;
protected $cacheExpiration = 60; // 缓存60秒后自动刷新

public function getRows(): array
{
    // 原有代码保持不变
}

方式二:强制查询时跳过缓存

如果需要彻底禁用缓存(不推荐,会增加API调用频次),可以在查询时追加->withoutCache():

// 修改小部件中的query部分
->query(TopPage::query()->withoutCache())

3. 验证生效状态

可以通过浏览器开发者工具的Network标签,查看是否每隔60秒有新请求发送;同时观察Laravel日志中的TopPage model getRows method called条目,确认API是否被重新调用。

内容的提问来源于stack exchange,提问作者Nathan Bayne

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 18:54:53