una cGridView - più models

Salve a tutti ragazzi,

ho questa situazione relazionale:

  • Articoli MANY_MANY User (che sarebbero gli Autori)

  • User HAS_ONE Profile(contiene nome e cognome)

Nella mia cGridView del modello Article vorrei avere un campo Autori (concatenazione dei campi nome e cognome) e fin qui ci sono riuscito con una funzione getAuthors().

Ora vorrei che sia possibile fare la ricerca su questo campo allo stesso modo dei campi presente in Article. E’ possibile secondo voi?

Vi Elenco le parti fondamentali del codice interassato:

Model:BaseArticle.php




public function getAuthors($id) //estraggo tutti gli autori di ogni articolo

	{

			 $criteria=new CDbCriteria;

			 $criteria->select='profile.*'; //select id field


			 $criteria->compare('id_article',$id,true); //seach author name. partialMatch is on

			 $am=Article::model()->with('tblUsers.profile')->find($criteria);

	

				$authors = '';

				foreach($am->tblUsers as $u)

					$authors .= ($u->profile->attributes['firstname'][0].". ".$u->profile->attributes['lastname'].", ");

				return $authors;

	

	}



ArticleController.php




public function actionIndex() {


		$model=Article::model()->with('tblUsers.profile');//->findAll();


		//$model->unsetAttributes();


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

			$model->setAttributes($_GET['Article']);


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

			'model' => $model,

		));

	}



View:index.php




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

	'id' => 'article-grid',

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

	'filter' => $model,

	'columns' => array(

		array(


			'name'=> 'lastname',//'tblUsers.profile.lastname', <img src='http://www.yiiframework.com/forum/public/style_emoticons/default/huh.gif' class='bbc_emoticon' alt='???' /> cosa mettere? a chi appartiene?

			'header'=>'Authors',

			'type'=>'raw',

			'value'=>'Article::getAuthors($data->id)'

			//'value'=> '$data->tblUsers[0]->profile->lastname',

		),

		'title',

		'year',


	),

)); ?>




Vi dico subito che ho provato anche con solo un autore per volta,ma non sono riuscito, forse a causa della relazione MANY_MANY.

In passato con altre relazioni ero riuscito ad usare questa pagina del wiki.

Ma qui il problema è più profondo in quanto la funzione getAuthors concatena più dati, e un eventuale ricerca non dovrebbe coinvolgere i modelli e il database.

Allora avevo pensato che si poteva fare una ricerca in modo tale da assegnare all’input di ricerca degli autori più compare(uno per il nome e uno per il cognome).

Ma qualunque cosa provo non riesco a filtrare i dati con la ricerca effettuata dall’input dell’autori.

Ogni suggerimento è ben accetto.

Grazie