Como puedo aplicar ordenamiento en un listado que muestra datos de dos tablas?

Hola, lo que sucede es que tengo una pantalla donde debo listar unas noticias y los los nombres de los autores de dichas noticias, el problema es que cuando intento ordenar por la columna donde muestro el nombre del autor no me está ordenando, es decir, si intento ordenar por cualquier campo que pertenezca a la tabla de noticia no hay problema, pero cuando intento ordenar por cualquier campo de la tabla relacionada (autor) no me ordena.

actualmente el titulo para el ordenamiento de esa columna lo estoy colocando asi…


<?php echo $sort->link('autor.usr_nickname','Autor'); ?>

Alguien sabe que me puede estar haciendo falta?

From the documentation (v1.0)

Fijate que para que esto funcione tenés que estar llamando con el with(‘autor’)

Saludos

Asi lo tengo y aun no me funciona :(

Ayuda!!!

que version de yii tenes?

tengo yii-1.0.10.r1472

podes postear todo el metodo donde tenes ese codigo?

y si podes tambien el metodo relations()

Disculpen que haya cosas en ingles y otras en español pero es que son pruebas… jeje

El método en el controlador es…




	public function actionAdmin()

	{

		$this->processAdminCommand();


		$criteria=new CDbCriteria;

		

		//Se crea el objeto para la paginación			

		$pages=new CPagination(Noticia::model()->count($criteria));

		

		//Si se pasa por get la variable 'size'... 

		if(isset($_GET['size']) and is_numeric($_GET['size']))

			$pages->pageSize = $_GET['size'];

		else 

			$pages->pageSize = self::PAGE_SIZE;


		$pages->applyLimit($criteria);


		//Objeto para el ordenamiento

		$sort=new CSort('Noticia');

		$sort->applyOrder($criteria);


		//Se consultan todos los registros que coinciden con los criterios.

		$models=Noticia::model()->with('autor')->findAll($criteria);

		//Se despliega la vista...

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

			'models'=>$models,

			'pages'=>$pages,

			'sort'=>$sort,

			'columnaTitulo'=>$columnaTitulo,

			'idioma'=>$idioma,

		));

	}



y la función relations es…




	public function relations()

	{

		return array(

	        'autor'=>array(self::BELONGS_TO, 'User', 'usu_codigo','joinType'=>'INNER JOIN', 'alias'=>'author'),

		);

	}



y en el view coloco lo siguiente…


<?php echo $sort->link('author.usr_nickname','Autor'); ?>

Proba cambiando relations asi:




public function relations()

        {

                return array(

                'author'=>array(self::BELONGS_TO, 'User', 'usu_codigo','joinType'=>'INNER JOIN', 'alias'=>'author'),

                );

        }



y esto




$models=Noticia::model()->with('author')->findAll($criteria);



Es decir tanto el alias como el nombre de la relacion deben ser iguales (creo)

Acabo de probar asi y nada… :-[

Es muy raro!

Deberia funcionar.

Te aseguraste que siempre que decia autor diga author (o viceversa). Es decir, si usas autor, usa autor en todos lados (nombre de la relacion, alias y with, y tambien en la vista)?

Si no es eso entoces puede que puede ser…

Me ha pasado varias veces que una simple coma me rompia todo el codigo (y ni hablar de errores como $text y $texto usados como si fueran la misma variable -y obviamente no lo son-, jajaja)

Uyyy!!.. ya me funcionó, tenias razón con el ejemplo que me pegaste un par de post mas arriba, lo que pasa era que me faltaba hacer el array para la propiedad ‘attributes’, entoonces tuve que agregar lo siguiente:


$sort->attributes = array('not_fecha','not_titulo_esp','autor.usr_nickname'=>'authorName',);

Y listo!

Muchas gracias!