here's how to do it. This function will output an array of models, with their related values (as deep as you wanna go), in JSON format. Instead of showing every attribute, you indicate the ones you want to output using $attributeNames. The key is the CHtml::value() function, that can output related values easily.
/** * takes an array of models and their attributes names and outputs them as json. works with relations unlike CJSON::encode() * @param $models array an array of models, consider using $dataProvider->getData() here * @param $attributeNames string a comma delimited list of attribute names to output, for relations use relationName.attributeName * @return void doesn't return anything, but changes content type to json and outputs json and exits */ function json_encode_with_relations(array $models, $attributeNames) { $attributeNames = explode(',', $attributeNames); $rows = array(); //the rows to output foreach ($models as $model) { $row = array(); //you will be copying in model attribute values to this array foreach ($attributeNames as $name) { $name = trim($name); //in case of spaces around commas $row[$name] = CHtml::value($model, $name); //this function walks the relations } $rows[] = $row; } header('Content-type:application/json'); echo CJSON::encode($rows); exit(); //or Yii::app()->end() if you want the log to show in debug mode } //usage: $myModels = $myDataProvider->getData(); //or you can use $model->findAll(); $modelAttributeNames = 'id, subject, body, someStatisticalRelationName, someRelationName.attribute, someRelationName.someOtherRelationName.attribute'; json_encode_with_relations( $myModels, $modelAttributeNames );