E’ possibile. Per far apparire la società e non il suo id, devi prima modificare il model di questa tabella. Per la precisione, nel model devi inserire la relazione alla tabella esterna. Quando disegnerai il CGridView, quindi, al posto di idazienda ci potrai mettere azienda.nome. Dove azienda è il nome della relazione in questo model, e nome è il nome del campo nella tabella delle aziende.
Supponendo che il CGridView che ci hai mostrato provenga dalla tabella Dipendenti, e supponendo che la tabella delle aziende si chiami Aziende. E supponendo che esista nella tabella Dipendenti anche una chiave esterana Dipendenti.azienda, il tuo model dovrebbe avere questa realzione:
class Dipendenti extends CActiveRecord {
…
public function relations() {
return array(
'azienda' => array(self::BELONGS_TO, 'Aziende', 'idazienda'),
);
}
…
}
Aggiungendo il campo di una tabella esterna, di base si disabilita la ricerca su quel campo.
Ecco come potrebbe essere il tuo CGridView:
<?php
$this->widget('zii.widgets.grid.CGridView', array(
'id' => 'paesi-grid',
'dataProvider' => $model->search(),
'filter' => $model,
'columns' => array(
'nome',
'cognome',
array(
'name' => 'azienda',
'filter' => CHtml::activeTextField($model, 'azienda'),
'value' => '$data->azienda->nome',
),
array(
'class' => 'CButtonColumn',
),
),
));
?>
Però non p finita qui: adesso devi mettere mano anche al controller:
public function search() {
$criteria = new CDbCriteria;
$criteria->compare('nome', $this->nome, true);
$criteria->compare('azienda.nome', $this->azienda, true);
$criteria->join = 'join aziende on aziende.id = t.azienda';
$criteria->with = array('aziende');
return new CActiveDataProvider(get_class($this), array(
'criteria' => $criteria,
));
}
Adesso provo a risponderti al terzo quesito: la questione dei bottoni a fine riga. Puoi farlo! Per farlo vedi l’ultimo elemento dell’array? Quello che passa la strinca CButtonColumn? Ecco, prova a sostituirlo con questo:
array(
'class'=>'CButtonColumn',
'viewButtonUrl'=>'Yii::app()->createUrl("/controllername/view", array("id" => $data["id"]))',
'deleteButtonUrl'=>'Yii::app()->createUrl("/controllername/delete", array("id" => $data["id"]))',
'updateButtonUrl'=>'Yii::app()->createUrl("/controllername/update", array("id" => $data["id"]))',
),
modificando opportunamente i bottoni. quella che vedi, dovrebbe essere il default. Modificandolo dovresti ottenere il risultato che cerchi.