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
   );
  }
}

この検索フォームをフロントエンド フォームに追加して検索フォームを投稿すると、常に [User Error] が発生し、最後にこのような内容の 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 に答える