将 $_POST 中包含的数组转换为 Yii 框架中的 MySql 查询


Translating array included in the $_POST to MySql query in Yii Framework

我试图用 Yii 框架解决我的问题。我有一个返回 $_POST 的视图:

Array ( [Questions] => Array ( [countries] => Array ( [0] => 1 ) [categories] => 1 ) [yt0] => Search )

类别等信息是单个 ID,其中国家/地区是一个数组。

现在,我的问题是,tu 如何正确使用 Yii 模型查询生成器,以便我可以从数组中包含许多国家的语句。东西喜欢:

"SELECT questions.name from questions WHERE countries.id == $_Post['Questions']['countries'][ 0 ] AND countries.id == $_Post['Questions']['countries'][ 1 ] AND .... + n times for countries" 

当 $_POST["问题"]["国家"] 只返回一个 id 时,我使用了以下内容:

  $model = Questions::model()->with( 
                array(  'countries' => array (
                          'select' => 'name',
                          'condition' => 'countries.id=:cou_id', // How to do for array?
                          'params' => array (':cou_id' => $_POST["Questions"]["countries"]) // How to do for array ? 
                        ) 
                )
        )->findAll(array ('select' => 'question')); 

如何为多个国家做什么?如何在 Yii:model 查询生成器中包含 foreach 循环?!请帮忙。

最终,条件的condition属性需要包含一个使用 MySql IN 函数的片段,例如 countries.id IN (x, y, z, ...) .你可以手动执行此操作,但 Yii 提供了方便的方法CDbCriteria::addInCondition提供帮助:

$countryCriteria = new CDbCriteria();
$countryCriteria->select = 'name';
$countryCriteria->addInCondition('id', $_POST["Questions"]["countries"]);
$model = Questions::model()->with(array('countries' => $countryCriteria))
                           ->findAll(array('select' => 'question')); 

以下代码有效:

$criteria = new CDbCriteria(); 
$criteria->with = array('countries');
$criteria->addInCondition('countries.id' , $_POST['Questions']['countries']);
$model = Questions::model()->findAll($criteria);