複数のテーブルからの検索で問題が発生しています。私は正常に動作するカードモデルでキーワード検索を設定しています。また、キーワードで card_id の外部キーを持つ連絡先モデルを調べたいと考えています。どうすればいいのか分からないようです。
注目すべき/問題点は、findByContacts
機能と次のとおりです。
array('Contact.street_suburb' => 'contacts',
'type' => 'subquery',
'method' => 'findByContacts',
'field' => 'Card.id'),
最初は郊外を検索しようとしましたが、理想的には、連絡先モデル内のフィールドのいずれかがカード検索に表示されるようにしたいと考えています。
ありがとう!
カードモデルの私のコードは次のとおりです。
public $filterArgs = array(
array('name' => 'keyword', 'type' => 'query', 'method' => 'filterQuery'),
);
public $hasAndBelongsToMany = array('Contact' => array('with' => 'Contact'));
public function filterQuery($data = array()) {
if(empty($data['keyword'])) { // keyword is the name of my search field
return array();
}
$query = '%'.$data['keyword'].'%';
return array(
'OR' => array(
array('Card.name LIKE' => $query),
array('Property.name LIKE' => $query),
array('Building.name LIKE' => $query),
array('Stage.name LIKE' => $query),
array('Contact.street_suburb' => 'contacts', 'type' => 'subquery', 'method' => 'findByContacts', 'field' => 'Card.id'),
)
);
} // END SEARCH
// FIND BY CONACTS - PART OF SEARCH
// ------------------------------------------------------------------------------------>
public function findByContacts($data = array()) {
$this->Contact->Behaviors->attach('Containable', array('autoFields' => false));
$this->Contact->Behaviors->attach('Search.Searchable');
$query = $this->Contact->getQuery('all', array(
'conditions' => array('Contact.street_suburb' => $data['contacts']),
'fields' => array('foreign_key'),
'contain' => array('Contact')
));
return $query;
}