0

考虑以下 Silverstripe 页面类

<?php

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 错误。

AND ("DataObjectClass_Live"."DataObjectClass_Live" LIKE 'title') ORDER BY "Sort" LIMIT 25 OFFSET 0 Table 'database DataObjectClass_Live' doesn't exist

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

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

4

1 回答 1

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

于 2013-04-06T08:17:19.293 回答