0

このクエリを Yii モデル指向のスタイルで書くと問題が発生しました。

質問、カテゴリ、国、および関係テーブルの 3 つのメイン テーブルがあります: question_has_categories、questions_has_countries。

今、国、カテゴリに属する​​質問を検索しようとしています。

通常のSQLステートメントで私は書きます:

SELECT q.id, q.question, c.name, co.name
                FROM questions AS q, 
                     categories AS c, 
                     countries AS co,
                     questions_has_countries AS ta,
                     questions_has_categories AS qhc

                WHERE 
                     q.id = qhc.questions_id
                AND  c.id = qhc.categories_id
                AND  q.id = ta.questions_id 
                AND  co.id = ta.countries_id
                AND  c.id = 1 
                AND  co.id = 2

これはうまくいきます。Yii Active Record を使用して、次のように検索してみます。

$model = Questions::model()->with( 
         array( 'categories' => array (
                     'select' => 'name',
                     'condition' => 'categories.id=:cat_id',
                     'params' => array (':cat_id' => $_POST["Questions"]["categories"])
                     ) 
              ), 
         array( 'countries' => array (
                     'select' => 'name',
                     'condition' => 'countries.id=:cou_id',
                     'params' => array (':cou_id' => $_POST["Questions"]["countries"])
                     ) 
        )
)->findAll(array ('select' => 'question'));

このコードは、国ではなく、カテゴリのみを考慮します (すべての国を返します。フィルター処理は行わず、絞り込みません)。

私は何を間違っていますか?

私の質問モデル関係関数は次のようになります:

public function relations()
{
return array('categories' => array(self::MANY_MANY, 'Categories',  'questions_has_categories(questions_id, categories_id)'),
             'countries' => array(self::MANY_MANY, 'Countries', 'questions_has_countries(questions_id, countries_id)'),
    );
}

助けてください:)ありがとう

4

1 に答える 1

1

これを試して

$model = Questions::model()->with( 
             array( 'categories' => array (
                      'select' => 'name',
                      'condition' => 'categories.id=:cat_id',
                      'params' => array (':cat_id' => $_POST["Questions"]["categories"])
                    ),
                    'countries' => array (
                      'select' => 'name',
                      'condition' => 'countries.id=:cou_id',
                      'params' => array (':cou_id' => $_POST["Questions"]["countries"])
                    ) 
                  )
    )->findAll(array ('select' => 'question'));
于 2013-09-12T14:19:24.887 に答える