Я трачу много времени на поиск ответа на этот вопрос, поэтому подумал поделиться им с вами, ребята. Надеюсь, это сэкономит ваше драгоценное время.
Как упоминал Джон выше: CDbCriteria
не собирает достаточно информации для построения полного запроса, вы должны также использовать информацию о классе модели, на которую вы наложите ограничения запроса.
Как пример, приведенный в документации Yii для CDbCriteria ; вот как ты это используешь -
$criteria=new CDbCriteria();
$criteria->compare('status',Post::STATUS_ACTIVE);
$criteria->addInCondition('id',array(1,2,3,4,5,6));
$posts = Post::model()->findAll($criteria);
Здесь Post
- это название модели, для которой вы выполняете условие запроса.
Так что, если вы хотите получить текстовое представление запроса, написанное в CDbCriteria, вы должны также включить информацию о модели, т. Е. Post.
Вот как вы можете это сделать -
$model = new Post();
$query = $model->getCommandBuilder()->createFindCommand($model->getTableSchema(), $criteria)->getText();
Когда вы печатаете значение в переменной $query
, он печатает необработанный запрос.
Надеюсь, это поможет.