【问题标题】:Cakephp Search from join tableCakephp 从连接表中搜索
【发布时间】:2017-07-24 11:13:19
【问题描述】:

您好,我在查询中加入了多个表。我想根据我在多个表上检查的搜索关键字获取结果。

这是我的代码

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

查询成功运行,并得到我想要的结果。但在同一个查询中,我也想在 Category 表中进行搜索。但是如果我这样做了

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

我收到一条 sql 错误,提示找不到列名。

类别表有两列 cat_idcat_name

GigPostAndCategoryid, cat_id,gig_post_id(因为一个gigpost 可以有多个类别,所以我为此制作了一个单独的表格)

因此,如果搜索的关键字与类别中的某些内容匹配,我也需要帮助来获得基于类别的结果

【问题讨论】:

    标签: php mysql cakephp cakephp-2.0 cakephp-2.3


    【解决方案1】:

    当您“包含”数据时,它实际上通常会运行一个单独的查询,然后将其组合在一起返回给您。

    因此,您无法针对包含的表运行条件(取决于某些因素,但最好只是假设您不能)。

    改为使用 JOIN。这将确保它被拉到同一个查询中,并允许您访问连接表字段。

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

    【讨论】:

    • 谢谢@dave...如果可能的话,你能不能用join来写这个查询,我是新手,我只知道这个方法
    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多