1

我在 cakePHP 中有两个表。

competencies
------------
id
name

competenceRatings
-----------------
id
competence_id
user_id
rating

我需要一种以蛋糕方式编写以下查询的方法:

SELECT * FROM 能力,其中 id 不在(从能力等级中选择能力 ID,其中雇员 ID = $userId)

有人请帮助我!

我在使用这个子查询方法之前做了什么:

我尝试了能力->hasMany->competenceRatings,competenceRatings->belongsTo->competencies 关系。

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

我希望能够获得用户没有对competitionRatings 表进行任何评级的能力名称。即,我需要能力表中的名称列表,其中 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);
4

1 回答 1

2

您可能必须使用子查询():

$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,请不要忘记通过“包含”包含能力。

于 2012-08-04T19:44:42.357 回答