考虑以下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版本中都会遇到相同的错误。
任何帮助或指示将不胜感激。
答案 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