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

Nova v4 Lens中如何获取查询结果用于ChartJS卡片开发?

在Nova v4 Lens卡片中使用动态查询结果的解决方案

在Nova v4的Lens里,直接调用$this->query()只能拿到模型的原始查询,无法获取Lens已经过滤后的上下文数据。要解决这个问题,你可以通过请求对象获取经过Lens处理后的查询构建器:

关键方法:$request->newQuery()

Nova的NovaRequest(Lens场景下实际是LensRequest)提供的newQuery()方法,会返回已经应用了当前Lens所有过滤条件、排序规则的查询实例,用它就能拿到Lens展示的真实数据。

改造后的代码示例

public function cards(NovaRequest $request)
{
    // 一次性获取经过Lens过滤后的结果,避免重复查询
    $records = $request->newQuery()->get();

    return [
        (new StackedChart())
            ->title('Revenue')
            ->series($records->map(function ($record) {
                return [
                    'barPercentage'   => 0.5,
                    'label'           => $record->name,
                    'backgroundColor' => $record->color,
                    'data'            => $record->data,
                ];
            })->toArray())
            ->options([
                'xaxis' => [
                    'categories' => $records->map(fn($record) => $record->created_at->day)->values()->toArray(),
                ],
            ]),
    ];
}

额外优化建议

  • 如果数据量较大,建议用select()指定需要的字段,减少数据库查询开销:
    $records = $request->newQuery()->select('name', 'color', 'data', 'created_at')->get();
    
  • 若图表数据不需要实时更新,可以给查询结果添加缓存,提升页面加载速度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 08:57:32