Grid Cgridview - Come Avere Un Campo Custom?

Buona sera a tutti,

premetto subito che non ho creato delle relazioni tra la tabella "cliente" e la tabella "presenze".

Queste di seguito sono le strutture delle tabelle sopra citate:

tbl_cliente

  • id

  • nome

  • cognome

tbl_presenze

  • id_cliente

  • presenza

  • timestamp

il funzionamento della tabella presenze è quello di memorizzare ogni giorno se ogni cliente è stato assente o presente secondo certi calcoli.

Questa invece è la pagina /view/cliente/index.php




<h1>Postazioni</h1>


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

	//$this->widget('zii.widgets.CListView', array(

	//'dataProvider'=>$dataProvider,

	//'itemView'=>'_view',

	'id'=>'clienti-grid',

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

	'columns'=>array(

		array(

			'name'=>'id',

			'visible'=>Yii::app()->user->isAdmin,

		),

		'nome',

		'cognome',

		array(

			'name'=>'Presente?',

			//'value'=>/* in base all'id del cliente deve stamparmi 'si' o 'no' */,

		),

	),

)); 


?>



Il problema è che nell’ultima value non so come recuperare di nuobo l’id del cliente così potrei passarglielo al model Presenze e vedere se quel giorno il cliente è stato presente o no.

Ho specificato all’inizio di non aver specificato delle relazioni perchè, appunto, non so se mi avrebbe semplificato la cosa.

In conclusione, quindi, come faccio a riutilizzare di nuovo l’id del cliente?

Se metto




...

array(

	'name'=>'Presente?',

	'value'=>[b]$model->id[/b],

),

...



non mi stampa nulla nella colonna delle presenze.

Hai già una relation tra Cliente e Presenze ? Ce la puoi postare?

Ad ogni modo potresti mettere nel model cliente una function che accetta come parametro il giorno.

questa function restituisce si o no

come fare ? puoi fare un findByAttributes impostando appunto il client_id e (immagino) il giorno.

Se il find da ‘null’ returni ‘no’, altrimenti dai un si.

oppure ‘looppi’ sulla relation presenze e ne cerchi una col giorno indica. Se la trovi => si, altrimenti 'no

Nella grid view ad ogni modo usi il valore così




array (

  'header' => 'Presente?',

  'value' => '$data->clientePresente($giorno)'

)



dove ‘$giorno’ immagino sia la variabile che contiene il giorno cercato.

Grazie, era giusto quello che mi serviva!

Non riuscivo a recuperare l’id del cliente ed ora posso realizzare quello che mi serve creando una funzione ad hoc nel model presenze.

Riguardo alle relazioni, come ho detto all’inizio del post, non le ho fatte per ora.

Adesso faccio qualche prova secondo quanto mi hai suggerito ;)