У меня две таблицы в 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);
вам, вероятно, придется использовать подзапрос ():
$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.