[RISOLTO] Visualizzare Dati Con Grid Cgridview - Mi Mostra Tutti I Dati Della Tabella

Buona sera a tutti,

ho una tabella così strutturata

|–id–|--station_id–|--timestamp–|

e nel rispettivo controller ho la seguente action




	public function actionOnlineReport()

	{

		$dataProvider=new CActiveDataProvider('Accessi');

		$model=new Accessi('search');

		

		$station_id = $_GET['id'];

		

		$accessi = Accessi::model()->findAllByAttributes(array('station_id' => $station_id));

		

		$this->render('onlineReport',array(

			'dataProvider'=>$dataProvider,

			'model'=>$model,

			//'model'=>$accessi,

			'station_id'=>$station_id,

		));

	}



e la view fatta in questo modo




<?php

$this->widget('zii.widgets.grid.CGridView', array(

	'id'=>'stations-grid',

	'dataProvider'=>$model->search(),

	'filter'=>$model,

	'columns'=>array(

		'id',

		'station_id',

		array(

			'name'=>'timestamp',

			'value'=>Accessi::model()->timestamp2date($model->timestamp)

		),

		array(

			'class'=>'CButtonColumn',

		),

	),

));

?>



Sostanzialmente i problemi sono 2:

[list=1]

[*]il campo timestamp me lo dà vuoto. Ho provato anche con $data->timestamp ma mi dà errore ActiveRecord e uguale anche con $dataProvider->timestamp

[*]mi mostra tutte le stazioni. Cioè in pratica non le filtra in base all’id che gli passo.

Dove sbaglio?

[/list]

il tuo codice è un pò confuso, prima crei un dataprovider senza nessun filtro

e poi in effetti fai la query per la ricerca di model specifici ma non la passi da nessuna parte




		$dataProvider=new CActiveDataProvider('Accessi');

		$model=new Accessi('search');	

		$station_id = $_GET['id'];

		$accessi = Accessi::model()->findAllByAttributes(array('station_id' => $station_id));



hai differenti modi per fare quello che desideri, te ne suggerisco uno facile che prende spunto dalle crud che crea gii per la sezione admin, quindi puoi facilmente studiartela.

Ci sarebbero anche altri modi, sicuramente più correti :rolleyes:

nel Controller




public function actionOnlineReport()

{

        $model=new Accessi('search');

        $model->unsetAttributes();  // clear any default values

        $model->station_id = $_GET['id'];


        if(isset($_GET['Accessi']))

            $model->attributes=$_GET['Accessi'];


        $this->render('onlineReport',array(

            'model'=>$model,

        ));

}



nella view:




<?php $this->widget('bootstrap.widgets.TbGridView', array(

	'id'=>'stations-grid',

	'dataProvider'=>$model->search(),

	'filter'=>$model,

	'columns'=>array(

                'id',

                'station_id',

                array(

			'name' => 'timestamp',

			'type'=>'raw',

			'value' => 'CHtml::value($data,"timestamp")',

		),

                //oppure

                array(

			'name' => 'timestamp',

			'type'=>'raw',

			'value' => 'Accessi::model()->timestamp2date(CHtml::value($data,"timestamp"))',

		),

                //oppure

                array(

                        'name'=>'timestamp',

                        'value'=>'Accessi::model()->timestamp2date($data->timestamp)'

                ),

                array(

                        'class'=>'CButtonColumn',

                ),

        ),

));

?>



il CHtml::value è molto utile per validare l’attributo dell’oggetto in questione, nel caso non ci fossero valori a riempire $data->timestamp yii genererebbe un’eccezione, mentre CHtml::value($data,“timestamp”) è sempre valido.

Scusa se rispondo così in ritardo, ma avevo proprio perso di vista la tua risposta forse perchè non mi è arrivata nessuna mail di notifica.

Grazie al tuo suggerimento ho risolto il mio problema!

Ancora grazie ;)