2017-08-23 8 views
0

こんにちは私が入力したキーワードを使用して複数のテーブルから結果を取得したいのですが、私が午前問題は、私はここに私のクエリCakephpコンテナの動作における複数テーブルの検索

public function getGigPostBasedOnSearch($keyword){ 
     $this->Behaviors->attach('Containable'); 
     return $this->find('all', array(

      'contain' => array(
       'User','UserInfo', 'GigPostAndCategory.Category','Location','GigPostAndCalender' 

      ), 
       'conditions' => array(
        'AND' => array( 
         'GigPost.active' => 1, 
       'OR' => array(

      array('GigPost.title LIKE' => '%'.$keyword.'%'), 
      array('GigPost.description LIKE' => '%'.$keyword.'%'), 
      array('Location.location_string LIKE' => '%'.$keyword.'%'), 


     ) 
) 
       //'OrderGigPost.request' => 0 
      ), 
      'order' => 'GigPost.gig_post_id DESC', 

      'recursive' => 0 
     )); 
    } 

このクエリは正常に動作します私はcontain

を通じて取得されたテーブルを検索することができないのか分からないです。私はalso.Iこの

array('Category.cat_name LIKE' => '%'.$keyword.'%') 

のような何かをしたいカテゴリテーブル内のキーワードを検索したい

私はカテゴリテーブルで検索することができますどのように私を助けるだけでなく

ください

モデルGigPost.phpありがとう

<?php 



class GigPost extends AppModel 
{ 
    public $useTable = 'gig_post'; 
    public $primaryKey = 'gig_post_id'; 

public $hasAndBelongsToMany = array(
'Category' => 
array(
'className' => 'Category', 
'joinTable' => 'gigpost_category', 
'foreignKey' => 'gig_post_id', 
'associationForeignKey' => 'cat_id', 
'unique' => true, 
) 
); 
    public $hasOne = array(
     'Location' => array(
      'className'  => 'Location', 
      'foreignKey' => 'gig_post_id', 
      'conditions' => array('GigPost.gig_post_id = Location.gig_post_id') 
     )); 


    public $belongsTo = array(
     'User' => array(
      'className' => 'User', 
      'foreignKey' => 'user_id', 
      'fields' => array('User.user_id','User.email','User.active') 

     ), 
     'UserInfo' => array(
      'className' => 'UserInfo', 
      'foreignKey' => 'user_id', 


     ) 

    ); 







    public function getGigPostBasedOnSearch($keyword){ 
     $this->Behaviors->attach('Containable'); 
     return $this->find('all', array(

      'contain' => array(
       'User','UserInfo', 'GigPostAndCategory.Category'=>array(
        'conditions'=>array(

         'OR' => array(

          array('Category.cat_name' => '%'.$keyword.'%'), 
         ), 


        ) 
       ),'Location','GigPostAndCalender' 

      ), 
      'conditions' => array(
       'AND' => array(
        'GigPost.active' => 1, 
        'OR' => array(


         array('GigPost.title LIKE' => '%'.$keyword.'%'), 
      array('GigPost.description LIKE' => '%'.$keyword.'%'), 
      array('Location.location_string LIKE' => '%'.$keyword.'%'), 
      // array('Category.cat_name LIKE' => '%'.$keyword.'%'), 


     ) 
) 
       //'OrderGigPost.request' => 0 
      ), 
      'order' => 'GigPost.gig_post_id DESC', 

      'recursive' => 0 
     )); 
    } 




} 
+0

モデルにはどのような関係が定義されていますか? – drmonkeyninja

+0

@drmonkeyninja私の質問を更新します – mynameisbutt

+0

@drmonkeyninja他のモデルの詳細を追加したいのですが、これは現在の "ギフトポスト"に接続されていますか? – mynameisbutt

答えて

1

あなたの問題はGigPostCategoryとの関係がHABTMであるということですので、あなたはを使用する場合Cakeは、1対1関連がないため、関連するカテゴリを取得するために別のクエリを実行する必要があります。手動ではなくcontainカテゴリを結合を実行する必要があり、このラウンドを取得するには: -

$this->find('all', array(
    'contain' => array(
     'User', 'UserInfo', 'GigPostAndCategory.Category', 'Location', 'GigPostAndCalender' 
    ), 
    'joins' => array(
     array(
      'table' => 'gigpost_category', 
      'alias' => 'GigPostCategory', 
      'type' => 'INNER', 
      'conditions' => 'GigPost.id = GigPostCategory.gig_post_id' 
     ), 
     array(
      'table' => 'categories', 
      'alias' => 'Category', 
      'type' => 'INNER', 
      'conditions' => 'Category.id = GigPostCategory.cat_id' 
     ) 
    ), 
    'conditions' => array(
     'AND' => array( 
      'GigPost.active' => 1, 
      'OR' => array(
       array('GigPost.title LIKE' => '%'.$keyword.'%'), 
       array('GigPost.description LIKE' => '%'.$keyword.'%'), 
       array('Location.location_string LIKE' => '%'.$keyword.'%'), 
       array('Category.cat_name LIKE' => '%'.$keyword.'%'), 
      ) 
     ) 
    ), 
    'order' => 'GigPost.gig_post_id DESC', 
    'group' => 'GigPost.id', 
    'recursive' => 0 
)); 

これはカテゴリが主なクエリによって返されたデータに含まれることを保証します。

joinsの配列を少し変更する必要があるかもしれません。テーブルのケーキ命名規則を使用していないように思われるので、名前を付けたものがわかりません。しかし、これは正しい軌道に乗るはずです。

+1

ありがとうございます@drmonkeyninja。あなたは素晴らしいです。あなたは素晴らしいです。私はあなたの借金に今いる。ありがとうございました – mynameisbutt

関連する問題