Cakephp从连接表中搜索

问题描述:

您好,我在查询中加入了多个表。我想根据我检查多个表格的搜索关键字来获得结果。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 
     )); 
    } 

的查询工作顺利,让我得到了我想要的结果。但是在同一个查询中,我也想在类别表中进行搜索。但如果我这样做

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

我得到一个sql错误,说它找不到列名称。

分类表有两列 cat_idcat_name

GigPostAndCategory已经 idcat_idgig_post_id(因为一个gigpost可以有多个类别这就是为什么我做了一个单独的表为)

因此,如果搜索到的关键字与类别

中的内容匹配,则我需要获得基于类别的结果的帮助

当你'包含'数据时,它通常实际上运行一个单独的查询,然后将它们结合在一起返回给你。因此,您不能针对所包含的表运行条件(取决于某些因素,但最好只是假定您不能)。

而是使用JOIN。这将确保它被拉入相同的查询中,并且可以让您访问连接表字段。

(提示:你可以看看在DebugKit可以查看正在运行哪些查询这通常会为您提供所需,为什么它不工作的线索)

+0

谢谢@戴夫...可以请你如果可能的话,使用连接写这个查询,我是新来的,我只知道这个方法 – hellosheikh