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

Symfony控制器中如何获取搜索查询的结果总数?

解决KnpPaginator获取搜索总结果数的问题

嘿,你遇到的错误根源很清晰——你直接把整个SlidingPagination对象传给了setResultsqty()方法,但这个方法需要接收数字类型的参数,所以才会抛出"对象无法转换为字符串"的错误。

从你提供的Twig Dump信息能看到,SlidingPagination对象里确实用#totalCount私有属性存储了总结果数,但私有属性不能直接通过数组方式(比如$pagination['totalCount'])或者直接访问($pagination->totalCount)获取,必须用类提供的公共getter方法。

修复步骤:

  1. 使用KnpPaginator官方提供的getTotalItemCount()方法,这是SlidingPagination类专门用来获取总结果数的公共方法。
  2. 修改你代码里的错误行:
    // 原来的错误代码
    $searchmetrics->setResultsqty($pagination);
    // 替换为正确写法
    $searchmetrics->setResultsqty($pagination->getTotalItemCount());
    

修改后的完整控制器代码:

public function fpcAction(Request $request) { 
    $query = $request->query->get('q'); 
    $finder = $this->container->get('fos_elastica.finder.app.product'); 
    $page = $request->query->getInt('page', 1); 
    $paginator = $this->get('knp_paginator'); 
    $results = $finder->createPaginatorAdapter($query); 
    $pagination = $paginator->paginate($results, $page, 12); 

    $searchmetrics = new SearchTerms(); 
    $searchmetrics->setSearchterm($query); 
    $searchmetrics->setDate(time()); 
    // 正确获取并赋值总结果数
    $searchmetrics->setResultsqty($pagination->getTotalItemCount()); 

    $entityManager = $this->getDoctrine()->getManager(); 
    $entityManager->persist($searchmetrics); 
    $entityManager->flush(); 

    return $this->render('default/search.html.twig', ['searchresults' => $pagination, 'query' => $query]); 
}

额外验证小技巧:

如果你对方法返回值存疑,可以临时添加调试代码确认:

dump($pagination->getTotalItemCount()); // 应该输出类似8104的数字
die;

这样就能顺利把搜索结果的总数存储到数据库里了~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:03:51