2017-07-24 12 views
0

Bonjour, Je rejoins plusieurs tables dans ma requête. Je veux obtenir les résultats basés sur le mot-clé de recherche que je vérifie sur plusieurs tables.Cakephp Recherche à partir de la table de jointure

Voici mon code

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

La requête fonctionne avec succès et me obtenir les résultats que je voulais. Mais dans la même requête que je veux rechercher dans la table Catégorie ainsi. Mais si je le fais

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

Je reçois une erreur SQL qui indique qu'il n'a pas pu trouver le nom de la colonne.

table Catégorie a deux colonnes cat_id et cat_name

et GigPostAndCategory a id, cat_id, gig_post_id (parce que l'on gigpost peut avoir plusieurs catégories c'est pourquoi je me suis fait une table séparée pour cela)

J'ai donc besoin d'aide pour obtenir un résultat en fonction de la catégorie ainsi si les mots clés recherchés correspondent à quelque chose dans la catégorie

Répondre

0

Lorsque vous «contient» des données, il exécute souvent une requête distincte, puis les combine pour revenir à vous. Pour cette raison, vous ne pouvez pas exécuter des conditions sur les tables contenues (en fonction de certains facteurs, mais mieux vaut supposer que vous ne pouvez pas).

À la place, utilisez JOINs. Cela assurera qu'il est tiré dans la même requête, et vous donnera accès aux champs de la table jointe.

(Astuce:.. Vous pouvez regarder dans DebugKit pour voir ce que les requêtes sont en cours d'exécution Cela vous donnera généralement la moindre idée dont vous avez besoin de savoir pourquoi il ne fonctionne pas)

+0

merci ... @ Dave pouvez-vous s'il vous plaît écrire cette requête en utilisant join si possible, je suis nouveau à cela et je ne connais que cette méthode – hellosheikh