I have two tables in cakePHP.
competencies
------------
id
name
competenceRatings
-----------------
id
competence_id
user_id
rating
I need a way to write the following query in the cake way:
SELECT * FROM competencies WHERE id NOT IN (SELECT competence_id FROM competence_ratings WHERE employee_id = $userId)
Someone please help me!!
What i did before going to this subquery method:
I tried competencies->hasMany->competenceRatings, competenceRatings->belongsTo->competencies relations.
$competencies = $this->Competence->CompetenceRating->find('all',array('CompetenceRating.user_id' => $userId,'CompetenceRating.competence_id !=' => 'Competence.id'));
I want to be able to get the names of competencies for which a user have NOT made any ratings into competenceRatings table. i.e., I need list of names from competencies table for which there are no entries in comptenceRatings table(for given user_id).
EDIT
I tried table join also:
$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);
you would probably have to use a subquery():
the source for subquery is here:
https://github.com/dereuromark/tools/blob/2.0/Lib/MyModel.php#L405
you need to put this in your AppModel.php
BUT I think the subquery is not necessary. You can probably make a single and easy query out of it:
dont forget to include Competence via “contain” if you have recursive set to -1.