Yii Framework : Help to translate relational Sql query

自作多情 提交于 2019-12-11 15:58:46

问题


I encountered a problem to write this query in a Yii model oriented style.

I have a 3 main tables : questions, categories, countries and relational tables : questions_has_categories, questions_has_countries.

Now i try to search questions that belongs to country, category.

With normal SQL statement i write :

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

This works fine. Now with Yii Active Record i try to search like this :

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

This code respects only the categories, not countries ( returns for all countries, doesnt filter, narrow down ).

What am i doing wrong ?

My Question Model relations function looks like this :

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)'),
    );
}

Pls help :) Thanks


回答1:


try this

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


来源:https://stackoverflow.com/questions/18764882/yii-framework-help-to-translate-relational-sql-query

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!