如何阻止Silverstripe SearchContext抛出Version Table_Live错误

时间:2013-04-04 20:58:12

标签: search silverstripe

考虑以下Silverstripe页面类

    

class Page extends SiteTree{

static $has_many = array('OtherDataObjects' => 'DataObjectClass');

public function getSearchContext() {

    $fields = new FieldSet(

        new TextField('Title', 'Tour'),
        new DropdownField('OtherDataObjects', 'Other Data Object', array('data', 'value')
    );

    $filters = array(
      'Title' => new PartialMatchFilter('Title'),
      'OtherDataObjects' => new PartialMatchFilter('OtherDataObjects.Title')
    );
    return new SearchContext(
      'Page', 
      $fields, 
      $filters
   );
  }
}

将此搜索表单添加到前端表单并发布搜索表单始终会导致[用户错误],并在结尾处包含类似此类的SQL错误。 class Page extends SiteTree{ static $has_many = array('OtherDataObjects' => 'DataObjectClass'); public function getSearchContext() { $fields = new FieldSet( new TextField('Title', 'Tour'), new DropdownField('OtherDataObjects', 'Other Data Object', array('data', 'value') ); $filters = array( 'Title' => new PartialMatchFilter('Title'), 'OtherDataObjects' => new PartialMatchFilter('OtherDataObjects.Title') ); return new SearchContext( 'Page', $fields, $filters ); } }

每次尝试在has_many关系上运行搜索时,我的searchcontext搜索都会抛出错误。版本化扩展似乎是罪魁祸首,因为它将_live添加到所有表,无论基类是否具有版本化扩展,我在SIlverstripe版本2.4.x和最新的3.0.x版本中都会遇到相同的错误。

任何帮助或指示将不胜感激。

1 个答案:

答案 0 :(得分:0)

也许尝试使用sqlQuery。

之类的东西
function SearchResults() {
  $select = array('*');
  $from = array('OtherDataObjects');
  $where = array('OtherDataObjects:PartialMatch' => '%' . $data['Title'] . '%');
  $sqlQuery = new SQLQuery($select, $from, $where);
  $results = $sqlQuery->execute();
  return $results;
}

$data['Title']将是搜索文本框中的值

部分匹配参考:http://doc.silverstripe.org/framework/en/topics/datamodel

sql查询参考:http://doc.silverstripe.org/framework/en/reference/sqlquery