How to convert model data objects array to dataProvider
Solution 1
I use two stage building the provider shown below. But I found that it gives you trouble in terms of Pagination. I have not bothered to resolve that problem since am doing other things
$dataProvider = new CArrayDataProvider('User');
$dataProvider->setData($model->friends);
$this->widget('zii.widgets.grid.CGridView', array(
'id' => 'gridUser',
'dataProvider' =>$dataProvider,
));
That being said, your code should work (see the example below from API docs). I suspect there is wrong attribute in your relations than the provided code. Re-check the relation definition if it is ok
From Yii docs:
$rawData=Yii::app()->db->createCommand('SELECT * FROM tbl_user')->queryAll();
// or using: $rawData=User::model()->findAll(); <--this better represents your question
$dataProvider=new CArrayDataProvider($rawData, array(
'id'=>'user',
'sort'=>array(
'attributes'=>array(
'id', 'username', 'email',
),
),
'pagination'=>array(
'pageSize'=>10,
),
));
Solution 2
Got it :) , i can use CActiveDataProvider
instead of CArrayDataProvider
as given below
$this->widget('zii.widgets.grid.CGridView', array(
'id' => 'gridUser',
'dataProvider' => new CActiveDataProvider('User', array(
'data'=>$model->friends,
)),
//...... columns display list.....
));
Anyways thanks for the reply @Stefano
Prashanth Shyamprasad
A software engineer who have worked on RubyOnRails & PHP earlier, currently working on Java with Spring Boot, JPA, EmberJS, ReactJS etc.
Updated on July 05, 2022Comments
-
Prashanth Shyamprasad almost 2 years
Suppose I have model
User
which have many to many relation to itself named asfriends
. so$user->friends
(or$model->friends
in view) gives me an array ofUser
objects. I wanted to display the friends as gridview. ButCGridView
data asdataProvider
object. Googling for it found the way to convert array of model objects todataProvider
object as given below.$this->widget('zii.widgets.grid.CGridView', array( 'id' => 'gridUser', 'dataProvider' => new CArrayDataProvider($model->friends, array()), ));
Now using this I get an error
Property "User.id" is not defined.
UPDATE
public function relations() { return array( 'friends' => array(self::MANY_MANY, 'User', 'friendship(user_id, friend_id)'), ); }
-
Prashanth Shyamprasad over 11 yearsgot the exact thing i was searching, anyways thanks dude. thumbs up to your answer too.
-
Prashanth Shyamprasad over 11 yearsthe exact answer that i was searching is given below. please check it and upvote if its useful
-
Stefano Mtangoo over 11 yearsGreat that I was of help :)
-
Prashanth Shyamprasad over 11 yearsPlease check if the below given answer is correct or not. I got the required result from that. I just want to know if its a better answer or not
-
Stefano Mtangoo over 11 yearsits nice and efficient solution I can think of. So no need to worry!
-
Gero about 11 yearsthis is a better answer, as it enables CGridView to fetch grid headers from the CModel...
-
Xavier John over 10 yearsHow to get rid of 'Displaying 1-2 of 6 results.' like text that shows up above the grid?