将查询子句添加到cakephp查找操作

时间:2014-10-06 19:59:52

标签: php mysql cakephp cakephp-model

我的用户模型上有一个标准的查询查询,如下所示:

$user = $this->User->find( 'all', array( 'conditions' => array( 'User.id' => $user_id ) ) );

我还想对这个函数调用的where子句做一些扩展,如下所示:

$query_extension = 'AND users.id IN ( complex join between a few tables )';

我想将这个复杂的WHERE子句添加到该用户查找条件的末尾,但我不知道该怎么做。我正在研究ConnectionManager类,但我仍然不确定如何附加这个额外的子句:

http://api.cakephp.org/2.5/class-ConnectionManager.html#_getDataSource

2 个答案:

答案 0 :(得分:1)

检查我使用的示例代码,您还可以设置动态内容,如joins将拥有数组您构建的内容或 将有空白数组。

$courseNames = $this->UsersCourse->Course->find('list',
            array('fields'=> array('Course.course_name'),
                  'order'=> array('Course.course_name'),                   
                  'conditions'=>array('Course.is_active'=>1 ,
                                      'CourseCategory.is_active'=>1
                                      ),
                    "joins" => array(
                                array(
                                    "table" => "course_categories",
                                    "alias" => "CourseCategory",
                                    "type" => "INNER",
                                    "conditions" => array(
                                        "CourseCategory.id = Course.course_category_id"
                                    )
                                )
                            )                                                                                                                              
                  )

);

答案 1 :(得分:0)

这就是如何执行此操作。请注意,添加到主查询的子句包含AND这意味着它实际上是where子句的一部分,可以作为字符串添加到find中,如下所示。

// Note here that including the $complex_subselect_string as an un-keyed term in the conditions automatically ANDs this extra query clause
$complete_user_list = $this->find( 'all', array( 'conditions' => array( $complex_subselect_string ), 'limit' => $limit, 'contain' => array() ) );