Rahul Thakur
Rahul Thakur

Reputation: 821

Get all data using CActiveDataProvider

I have a model InboxMessageHelper with relations like 'message', 'sender' and 'receiver' and I am using the following criteria to query data:

$model = new CActiveDataProvider('IndividualMessageHelper', array(
                    'criteria'=>array(
                    'condition'=>'receiver_id = '.Yii::app()->user->id,
                        'order'=>'message.created_at DESC',
                        'with'=>array('message', 'sender', 'receiver'),
                        'together'=>true,
                ),
        ));

I want to get all data (i.e. including the relations data) inside the controller and form a JSON, but the problem is that i cannot access related fields data. I can see that the data is available when I use

CVarDumper::dump()

when I try to encode $model->data then only data from current table gets encoded. How should I go about it?

Upvotes: 0

Views: 2285

Answers (1)

Joe Miller
Joe Miller

Reputation: 3893

I don't think CActiveDataProvider can be used in this way. You need to be working with the model. So you'll need something like this in your controller.

    $models = IndividualMessageHelper::model()->findAll('receiver_id = '.Yii::app()->user->id);
foreach($models as $model){
    $json[] = $model->getAttributes; //This won't get any model properties you've declared 
yourself, only database columns
}

    //Now get the related records and add them to the array.
    array_push($json, $model->getRelated('message')->getAttributes());
    array_push($json, $model->getRelated('sender')->getAttributes());
    array_push($json, $model->getRelated('receiver')->getAttributes());

    echo json_encode($json);

Upvotes: 1

Related Questions