0

私はcakephp 2.3.0を使用しています。概要 - 私のコントローラーには、1 つ以上の ID 値を返すクエリがあります。次に、SQL IN キーワードを使用して、次のクエリでこれらの id 値を使用したいと考えています。私は自分が達成したいことを概念的に知っています。私はこれを CakePHP で正しい方法で行っていると思いますが、間違っている可能性があります。IN句を動的に構築するためのコーディング部分についてはよくわかりません。

これが私のコントローラーからの私のコードスニペットです:

$this->set('userIDs', $this->Activity->ActivitiesOfInterest->find('all',
               array (
                    'conditions' => array ('ActivitiesOfInterest.activities_id' => $id),
                    'fields' => array ('ActivitiesOfInterest.user_id'))));

上記のコードは、期待する値を取得するので問題ありません。以下のコードでは、この部分 array(3, 4) をハードコーディングしました。これは、SQL IN キーワードに相当します。値 3、4 は userIDs 配列に格納されます。しかし、これは、上記のコードの配列から 3 と 4 の値を動的に構築する方法がわからないところです。もちろん、3 と 4 が常に値であるとは限りません。データベースの内容に依存するからです。配列をループして、ID のリストを作成する必要があると思います。私はまだ CakePHP に慣れていないので、これは経験豊富な人にとっては簡単な答えだと思います。

そして、はい、私のユースケースに基づいて、実際に deleteAll 操作を実行したいと思います。

$this->Activity->ActivitiesOfInterest->deleteAll(
                    array('ActivitiesOfInterest.user_id' => array(3, 4)), false);

ありがとうございます。

4

2 に答える 2

0

これは、deleteALL クエリのサブクエリを使用して行うこともできます。

$conditionsSubQuery['ActivitiesOfInterest.activities_id'] = $id;
$db = $this->Financial->getDataSource();
        $subQuery = $db->buildStatement(
                array(
            'fields' => array('ActivitiesOfInterest.user_id'),
            'table' => $db->fullTableName($this->Activity->ActivitiesOfInterest),
            'alias' => 'ActivitiesOfInterest',
            'offset' => null,
            'joins' => array(),
            'conditions' => $conditionsSubQuery,
            'order' => null,
            'group' => null
                ),$this->Activity->ActivitiesOfInterest
        );
        $subQuery = ' ActivitiesOfInterest.user_id IN (' . $subQuery . ')' ;
        $subQueryExpression = $db->expression($subQuery);

        $conditions[] = $subQueryExpression;
        $result = $this->Activity->ActivitiesOfInterest->deleteAll(compact('conditions'));
于 2013-04-06T05:04:39.537 に答える