Ordenado De Grid

Buenas noches foro.

Tengo un problema al momento del ordenado con las cabeceras del gridview,

De la manera normal que es la siguiente, me funciona correctamente el ordenado

Model


$criteria->compare('cotiza_sustituto',$this->cotiza_sustituto);

View


array(

	'name'=>'cotiza_sustituto',

	'filter'=>array(0=>"No",1=>"Si"),

),

Mi problema está en lo siguiente:

View


array(

	'name'=>'proveedor_search',

	'value'=>'$data->idSolicitud->idProveedor->nombre',

),

como se puede apreciar en la vista, tengo 2 tablas relacionadas, ¿Cómo debería ir el criteria para poder logar el ordenado de la cabecera si tengo esas relaciones?

Csort se encarga de ordenar, configuralo y pasaselo al CDbCriteria, algo como esto:




public function search() {

   $sort = new CSort();

   $sort->attributes = array(

	'proveedor_search'=>array(

		'asc'=>'idSolicitud.idProveedor.nombre',

		'desc'=>'idSolicitud.idProveedor.nombre desc',

	),

	'*',

   );


   $criteria=new CDbCriteria;

   ...

   return new CActiveDataProvider($this, array(

	'criteria'=>$criteria,

	'sort'=>$sort,

   ));



Saludos

Gracias por tu respuesta, pero aún me marca un error en cuanto al criteria,

éste es el código que estoy utilizando, pero no sé si esté bien.


$criteria=new CDbCriteria;

		$criteria->with = array('idSolicitud'); //Indicamos que la consulta se haga utilizando la relacion

		$criteria->compare('idSolicitud.id_proveedor.nombre', $this->proveedor_search, true);



Me marca error de que no existe la columna.

Gracias y Saludos.

Solo tienes dos tablas accesibles, la inicial y la que añades con la relación con with (que es idSolicitud), necesitas acceder a la tabla id_proveedor.




  $criteria=new CDbCriteria;

    $criteria->with = array(

         'idSolicitud' => array('joinType'=>'LEFT JOIN'),

         'idSolicitud.id_proveedor' => array('joinType'=>'LEFT JOIN'),

    );

  $criteria->compare('idSolicitud.id_proveedor.nombre', $this->proveedor_search, true);



pero a veces es más fácil hacerlas a mano Si las tablas son solicitud,proveedor:




  $criteria=new CDbCriteria;

  $criteria->join = " LEFT JOIN solicitud idSolicitud ON t.id_solicitud=idSolicitud.id";

  $criteria->join .= " LEFT JOIN proveedor id_proveedor ON solicitud.id_proveedor=id_proveedor.id";

  $criteria->compare('id_proveedor.nombre', $this->proveedor_search, true);



Si puedes activa un logger para ver la query que esta generando Yii que ayuda mucho.

Saludos.

"idSolicitud" es la relación que existe con la tabla en la que estoy haciendo el criteria, lo que yo estoy intentando es que, por medio de las relaciones entre la tabla x y la tabla "solicitudes", llegar a la tabla "proveedores" para utilizar el "nombre", ya que al igual que en la tabla x, en "solicitudes" existe una relación la cual es idProveedor.

No sé si me estoy dando a entender.

Gracias por tu ayuda, Saludos.

Vamos que no te lo puse fácil, me alegro de que resolvieses el problema, saludos.