Получение строкового представления из CDbCriteria - PullRequest
1 голос
/ 27 марта 2012

Есть ли способ получить строковое представление запроса из CDbCriteria ? Для тестирования и отладки.

Ответы [ 2 ]

4 голосов
/ 28 марта 2012

Вы можете использовать ведение журнала и профилирование, настроив свой main.php следующим образом:

'components'=>array(
    'log'=>array(
        'class'=>'CLogRouter',
        'routes'=>array(
            array(
                'class'=>'CWebLogRoute',
                'categories'=>'system.db.CDbCommand',
                'showInFireBug'=>true,
            ),
        ),
    ),
    'db'=>array(
        'enableProfiling'=>true,
        'enableParamLogging'=>true,
    ),              
),
3 голосов
/ 12 сентября 2016

Я трачу много времени на поиск ответа на этот вопрос, поэтому подумал поделиться им с вами, ребята. Надеюсь, это сэкономит ваше драгоценное время.

Как упоминал Джон выше: 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, он печатает необработанный запрос.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...