CakePHP вложенные два запроса

У меня две таблицы в cakePHP.

competencies ------------ id name competenceRatings ----------------- id competence_id user_id rating 

Мне нужен способ написать следующий запрос в методе торта:

SELECT * FROM компетенций WHERE id NOT IN (SELECT: компетенция_id FROM compet_ratings WHERE employee_id = $ userId)

Кто-то, пожалуйста, помогите мне!

Что я сделал до этого метода подзапроса:

Я пробовал свои компетенции -> hasMany-> компетенцииRatings, компетенцииRatings-> принадлежитTo-> отношениям с компетентностью.

 $competencies = $this->Competence->CompetenceRating->find('all',array('CompetenceRating.user_id' => $userId,'CompetenceRating.competence_id !=' => 'Competence.id')); 

Я хочу иметь возможность получить имена компетенций, для которых пользователь НЕ сделал какие-либо оценки в таблице компетенций. т.е. мне нужен список имен из таблицы компетенций, для которых нет записей в таблице comptenceRatings (для данного user_id).

РЕДАКТИРОВАТЬ

Я также попытался подключиться к таблице:

 $options['joins'] = array( array( 'table' => 'competence_ratings', 'alias' => 'CompetenceRating', 'type' => 'LEFT OUTER', 'conditions' => array( 'Competence.id = CompetenceRating.competence_id' ) ) ); $options['conditions'] = array( 'CompetenceRating.employee_id' => $employee['Employee']['id'] ); $competencies = $this->Competence->find('all',$options); 

Solutions Collecting From Web of "CakePHP вложенные два запроса"

вам, вероятно, придется использовать подзапрос ():

 $subqueryOptions = array('fields' => array('competence_id'), 'conditions' => array('employee_id'=>$user_id)); $subquery = $this->Competence->CompetenceRating->subquery('all', $subqueryOptions); $res = $this->Competence->CompetenceRating->find('all', array( 'conditions' => array('id NOT IN '. $subquery) )); 

источник для подзапроса находится здесь: https://github.com/dereuromark/tools/blob/2.0/Lib/MyModel.php#L405 вам нужно поместить это в свой AppModel.php

НО Я думаю, что подзапрос не нужен. Возможно, вы можете сделать из него простой и простой запрос:

 $this->Competence->CompetenceRating->find('all', array( 'group' => 'competence_id', 'conditions' => array('NOT' => 'employee_id'=>$user_id)), 'contain' => array('Competence') )); 

не забудьте включить Компетентность через «содержать», если у вас есть рекурсивный набор -1.