-2

この関数は OR 条件で動作します。AND条件で動作するにはこれが必要です。任意のヘルプ:

$ands = array();
foreach ($array_training_id as $id) {
        $ands[] = array('TrainingsUser.training_id' => $id);
}
$conditions = array('AND' => $ands);
$users = $this->TrainingsUser->find('all', array('conditions' => $conditions));

次のようなクエリ AND 条件を書きたいと思います。

SELECT user_id FROM trainings_users WHERE training_id = 172 AND training_id = 174

このクエリは、最初の ID を取得するときに機能します。
テーブルの説明: 3 つのテーブルがあります Training - User - Training_users... Training_users テーブルには traing_id と user_id があります私が必要なのは次のようなものです: SELECT user_id FROM Training_users WHERE training_id = 172 AND training_id = 174... SqlMyadmin でも機能しません

ここに画像の説明を入力


training_id 172 AND training_id 174 を与えるときに必要なものは、ユーザー 150 のみを返す必要があります

4

2 に答える 2

5

そもそも $array_project_id が文字列なのはなぜですか (名前の競合に加えて^^)? これは ID の配列である必要があり、cake はそのままで自動的に操作できるようになります。

まあ、とにかく:

$ids = explode(',', $array_project_id);
// now its a clean array

$users = $this->Training->find('all', array('conditions' => 
    array('Training.Project_id' => $ids)
));

あなたのコメントの後、ここで AND を使用する価値はまだわかりません。しかし、一体、ここに行きます:

$ands = array();
foreach ($ids as $id) {
    $ands[] = array('Training.Project_id' => $id);
}
$conditions = array('AND' => $ands);
$users = $this->Training->find('all', array('conditions' => $conditions));

出来上がり。ただし、それでも機能しません。

HABTM リレーションを使用しているようです (最初にこの重要な情報を提供する必要があります!)。次に、ここで 2 つの belongsTo リレーション (= 左結合) を作成するために、中間モデル/リレーションをクエリする必要があります。

あなたが本当に必要としているのは (なぜ関連するリレーションと Training_users に関する情報を投稿したのですか?) は、中間テーブル "Training_users" に対して、1 つが gotTo 方向 (ユーザーへの左結合) に含まれているクエリを実行することです。そして最も重要な事実は、AND の代わりに OR を使用することです。これにより、必要な結果が得られます。

于 2013-02-14T17:35:25.710 に答える