2014-10-06 3 views
0

У меня есть стандартный запрос найти на моей модели пользователя, которая выглядит, как следует:Добавление пункта запроса к операции CakePHP находят

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

У меня также есть некоторые расширения я хотел бы сделать, чтобы где положение этого вызова функции как так:

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

Я хочу, чтобы добавить этот комплекс ИНЕК до конца этого пользователя найти состояние, но я не знаю, как это сделать. Я смотрю в класс ConnectionManager, но я все еще не уверен, как добавить этот дополнительный пункт:

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

+0

Вид трудно сказать, не зная точного запроса вы пытаетесь писать, но вы можете сделать запрос с руководством Join, см http://book.cakephp.org/2.0/en/models /associations-linking-models-together.html#joining-tables. – Kai

+0

@kai, что в разделе 'IN' не важно. Я просто пытаюсь найти способ добавить предложение «IN» независимо от того, что в нем. – usumoio

+3

Прочитайте [раздел в кулинарной книге о подзапросах] (http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#sub -queries). Если это не соответствует вашим потребностям, сообщите нам, почему. – AgRizzo

ответ

0

Вот как эта операция может быть выполнена. Обратите внимание, что предложение, добавляемое к основному запросу, включает в себя: AND Это означает, что он фактически является частью предложения where и может быть добавлен как строка в найденную.

// 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())); 
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" 
            ) 
           ) 
          )                                
       ) 

);

Смежные вопросы