Yii Framework Forum: CActiveDataProvider, piccola domanda - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

CActiveDataProvider, piccola domanda Rate Topic: -----

#1 User is offline   Diegovl 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 96
  • Joined: 27-February 11

Posted 11 March 2011 - 08:26 PM

Ciao ancora ragazzi.

Tanto per test stavo creando da me un mini blog senza basarmi su quello del tutorial.

Comunque: se voglio recuperare un post preciso visualizzando sotto già i commenti potrei fare

$model = Post::model()->with('comments')->findByPk(1);


e poi visualizzare il post e i commenti con un foreach su $model->comments.

Il problema.

Se volessi sfruttare CDataProvider, come faccio a recuperare poi i valori degli attributi del "model"?

$dataProvider=new CActiveDataProvider('Post', array(
            'criteria'=>array(
                'order'=>'data DESC',
                'with'=>array('comments'),
            ),
            'pagination'=>array(
                'pageSize'=>1,
            ),
        ));

        $this->render('index',array(
			'dataProvider'=>$dataProvider,
            
		));

0

#2 User is offline   Besnik 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 13
  • Joined: 15-January 11

Posted 11 March 2011 - 08:31 PM

 foreach($dataProvider->getData() as $post){
	echo $post->xxxx;
	foreach($post->comments as $comment){
		echo $comment->yyyy;
	}
}

1

#3 User is offline   Diegovl 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 96
  • Joined: 27-February 11

Posted 11 March 2011 - 09:25 PM

Ti ringrazio.

Se invece avessi bisogno di accedere, per esempio, solo all'id del Post per inserirlo nel breadcrumbs e poi passare $dataProvider a zii.widgets.CListView?
0

#4 User is offline   sensorario 

  • Elite Member
  • Yii
  • Group: Moderators
  • Posts: 1,986
  • Joined: 07-September 10
  • Location:Cesena (Italy)

Posted 12 March 2011 - 09:07 AM

Se ho interpretato bene la tua domanda, dovrai semplicemente alterare 'condition' del tuo CActiveDataProvider in un modo simile al seguente:

$dataProvider=new CActiveDataProvider('Post', array(
            'criteria'=>array(
                'condition'=>'post.id=:id',
                'params'=>array(':id'=>33),
                'order'=>'data DESC',
                'with'=>array('comments'),
            ),
        ));


Se tu può essere utile un'ulteriore osservazione, io mi "diverto" ad alterare il mio model in modo da avere un controller estremamente ordinato e pulito.

Il codice che sto per

  public static function featuredNews() {
    return News::model()->findAll(array(
        'select' => 'id,datainserimento,titolo,abstract',
        'condition' => 'attiva=:attiva and \''
        . (date("Y-m-d"))
        . '\' between datainiziovalidita and datafinevalidita and pubblicainvetrina=1 '
        . (Yii::app()->user->isGuest ? 'and pubblica=1' : ''),
        'params' => array(
            ':attiva' => true,
        )
    ));
  }



Ti vorrei però far notare che alcune condizioni non vanno specificate qui ma nel metodo search. Se qui ho agito in questo modo, è perchè nel search filtro i dati per il ruolo dell'utente. Qui dovevo filtrare i dati in maniera differente e mi sembrava più logico fare in questo modo.
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users