CGridView e relazione BELONGS_TO

Non riesco a fare questa cosa nonostante i vari tutorial che mi sono letto!!

ho una tabella anagrafica (id, …)

e una agenti (id, anagrafica_id , …)

e la relazione del model Agenti


	

// MODEL AGENTI


public function relations()

{


		return array(

			'anagrafica' => array(self::BELONGS_TO, 'Anagrafica', 'anagrafica_id'),

		);

	}

  

Vorrei tramite un CGridView visualizzare le anagrafiche collegate alla tabella Agenti.

Vi ringrazio anticipatamente

Se nella tabella Anagrafica esiste il campo ‘nome’. Se la relazione che ci hai mostrato è corretta. Nel tuo CGridview devi mettere ‘anagrafica.nome’. Considera la relazione come una sorta di campo aggiunto alla tua tabella. Campo che, però, non fa riferimento ad un campo preciso, ma ad un altro model. In pratica con anagrafica.nome indichi “dammi il nome del model puntato da anagrafica”.

La relazione è giusta. Non ho capito bene quello che intendi dire. Comunque in sostanza io devo passare alla cgridview tutte le righe di anagrafica che sono collegate alla tabella agenti.

La mia difficoltà sta nel filtrare dal controller di Agenti queste righe

questa è la relazione del Model Anagrafica





//Model Anagrafica

/**

	 * @return array relational rules.

	 */

	public function relations()

	{

		// NOTE: you may need to adjust the relation name and the related

		// class name for the relations automatically generated below.

		return array(

			'agentis' => array(self::HAS_MANY, 'Agenti', 'anagrafica_id'),

		);

	}

sono arrivato ad una soluzione poco elegante ma almeno lascia intendere quello che volevo fare


/**

     * Manages all models.

     */

    public function actionAdmin() {

  

      $agenti = Agenti::model()->with('anagrafica')->findAll();

      

      foreach ($agenti as $key => $agente) {

        $anagrafica[$key] = Anagrafica::model()->findByPk($agente->anagrafica_id);

      }

      

     $dataProvider = new CArrayDataProvider($anagrafica);


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

          'dataProvider' => $dataProvider,

      ));

    } 

E’ molto più semplice:

Nella pagina admin.php di agenti, quando chiami il CGridView devi specificare semplicemente il nome del campo:

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

'id'=&gt;'messaggi-grid',


'dataProvider'=&gt;&#036;model-&gt;search(),


'filter'=&gt;&#036;model,


'columns'=&gt;array(


	'id',


	'anagrafica.nome',


	'anagrafica.cognome',


	array(


		'class'=&gt;'CButtonColumn',


	),


),

)); ?>

ah lo sapevo che ce stava la svolta :P

grandissimo l’unica cosa che il filtro non funziona

Già risolto in passato: qui trovi un esempio.