Silverstripe 3.7 站点搜索 - 查询失败:错误:语法错误

问题描述

我有一个在 Silverstripe 3.1.2 和上述模块的 0.9 版上运行的现有站点搜索。它遵循官方 Silverstripe 教程,并且在升级过程中自定义代码没有改变。此代码位于名为 SearchPage_Controller 的自定义控制器中,该控制器被路由到使用 'search//$Action/$ID/$Batch' : 'SearchPage_Controller'

$searchData = array(
    'Results' => $form->getResults(null,$data),'Query' => $form->getSearchQuery(),'Title' => _t('SearchForm.SearchResults','Search Results')
);
return $this->owner->customise($searchData)->renderWith(array('Page_results','Page'));

$form 是 /cms/code/search/SearchForm 的实例,$form->getResults() 随后调用 PostgressqlDatabase->searchEngine()。错误源自该方法中的这一行:

// Get the total items in this search
$totalItemsQuery = "SELECT COUNT(*) AS totalitems FROM (" . implode(" UNION ",$tables) . ") AS q1";
$totalCount = DB::query($totalItemsQuery);

运行搜索时,在准备好的语句附近出现以下错误

[警告] pg_query():查询失败:错误:“)”处或附近的语法错误第 3 行:WHERE (“ShowInSearch” = ?) ^

但看起来它实际上可能是由框架引起的,因为即使将 Postgres 模块回滚到原始 0.9 版本而单独留下 Silverstripe,它仍然会遇到此错误。 SS 3.1.2 的 0.9 也很好。完整的堆栈跟踪:

  • pg_query(Resource id #188,SELECT COUNT() AS totalitems FROM (SELECT disTINCT "ClassName","SiteTree_Live"."ID","ParentID","Title","URLSegment","Content","LastEdited","Created",NULL AS "Filename",NULL AS "名称","CanViewType",ts_rank("SiteTree_Live"."ts_SearchFields",q) AS "Relevance" FROM "SiteTree_Live",to_tsquery('english','fixed') AS q WHERE ("ShowInSearch" = ?) AND ("SiteTree_Live"."ts_SearchFields" @@@ q )) AS q1) PostgresqlConnector.PHP:202
  • PostgresqlConnector->preparedQuery(SELECT COUNT() AS totalitems FROM (SELECT disTINCT "ClassName",“标题”、“URLSegment”、“内容”、“上次编辑”、“创建”、NULL AS "文件名",'fixed') AS q WHERE ("ShowInSearch" = ?) AND ("SiteTree_Live"."ts_SearchFields" @@@ q )) AS q1,Array,256) PostgresqlConnector.PHP:218
  • PostgresqlConnector->query(SELECT COUNT() AS totalitems FROM (SELECT disTINCT "ClassName",256) Database.PHP:118
  • SS_Database->{closure}(SELECT COUNT() AS totalitems FROM (SELECT disTINCT "ClassName",“已创建”,NULL 为“文件名”,NULL 为“名称”,“CanViewType”, ts_rank("SiteTree_Live"."ts_SearchFields",'fixed') AS q WHERE ("ShowInSearch" = ?) AND ("SiteTree_Live"."ts_SearchFields" @@@ q )) AS q1) Database.PHP:193
  • SS_Database->benchmarkQuery(SELECT COUNT() AS totalitems FROM (SELECT disTINCT "ClassName",NULL AS "Name",q) AS "相关性" FROM "SiteTree_Live",'fixed') AS q WHERE ("ShowInSearch" = ?) AND ("SiteTree_Live"."ts_SearchFields" @@@ q )) AS q1,Closure) Database.PHP:119
  • SS_Database->查询(SELECT COUNT() AS totalitems FROM (SELECT disTINCT "ClassName",256) DB.PHP:276
  • DB::query(SELECT COUNT() AS totalitems FROM (SELECT disTINCT "ClassName",'fixed') AS q WHERE ("ShowInSearch" = ?) AND ("SiteTree_Live"."ts_SearchFields" @@@ q )) AS q1) PostgresqlDatabase.PHP:363
  • PostgresqlDatabase->searchEngine(Array,'fixed*',10,"Relevance" DESC,1) SearchForm.PHP:153

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)