2017-05-10 17 views
0

私はFriendsOfCakeのEasy model searchingプラグインを使用しており、これを使用してテーブルデータを検索しています。それは非常にうまくいっていますが、私は、関連するアイテムを、創設されたアイテムの外部キーと一致する外部キーで取得することを今は控えています。Cakephp 3検索プラグイン関連フィールドを取得

私の検索では検索対象の行だけが返されますが、同じforKeyを持つ他の行が必要なことをどのように定義できますか?コントローラー表内の

$query = $this->Content 
     ->find('search', [ 
      'search' => $this->request->getQuery() 
     ]); 

検索設定:コントローラ内部の

ID  | forKey | name | content 
------ | ------ | ------ | ------ 
1  | 1  | value1 | content1 
2  | 1  | value2 | content2 
3  | 2  | value3 | content3 

検索機能:

public function initialize(array $config) { 
    parent::initialize($config); 

    // Search 
    $this->addBehavior('Search.Search'); 

    // Setup search filter using search manager 

    $this->searchManager() 
//   ->value('id') 
     ->add('q', 'Search.Like', [ 
      'before' => true, 
      'after' => true, 
      'fieldMode' => 'OR', 
      'comparison' => 'LIKE', 
      'wildcardAny' => '*', 
      'wildcardOne' => '?', 
      'field' => ['content'], 
     ]) 
     ->add('foo', 'Search.Callback', [ 
      'callback' => function ($query, $args, $filter) { 
       // Modify $query as required 
      }]); 
} 
+0

私はまだこのプラグインを使用していませんが、 '$ query-> contains([...])をコールバックに入れてもうまくいくようですか?あるいは 'find( 'search')'の後に ' - > contains'節を追加しますか? –

答えて

1

私はあなたがしているかどうかわからないんだけど

私のテーブルは次のようになります複数のフィールドで条件に一致するものを見つけようとしている場合や、関連するテーブルでその条件を見つけようとしている場合。ちょうどそれらをカンマ区切りの追加、呼び出し元のテーブルから複数のフィールドを検索するための

:あなたが他のテーブルの関連項目への検索をバインドするために探している場合

'field' => ['content', 'id', 'name'], 

が含まれているとして、コントローラ検索のものが含まれる:

$query = $this->Content 
    ->find('search', [ 
     'search' => $this->request->getQuery() 
    ]) 
     ->contain(['OtherRelatedTable']); 

次にモデルコールにそれらを追加します。

'field' => ['content', 'id', 'name', 'OtherRelatedTable.id'], 

これは意味がありますか?

関連する問題