1

CakePHP には 2 つのテーブルがあります。

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

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

次のクエリをケーキのように書く方法が必要です。

SELECT * FROM コンピテンシー WHERE id NOT IN (SELECT コンピテンス_ID FROM コンピテンス_評価 WHERE 従業員 ID = $userId)

誰か助けてください!!

このサブクエリメソッドに行く前に私がしたこと:

コンピテンシー->hasMany->competenceRatings、competenceRatings->belongsTo->コンピテンシー関係を試しました。

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

ユーザーが評価を行っていないコンピテンシーの名前を、competenceRatings テーブルに取得できるようにしたいと考えています。つまり、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

おそらく、subquery() を使用する必要があります。

$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')
));

recursive を -1 に設定している場合は、「contain」で Competence を含めることを忘れないでください。

于 2012-08-04T19:44:42.357 に答える