Listar registros mediante atributo

Hola a todos les cuento el problema que me ha surgido en el desarrollo de un proyecto usando yii, lo que pasa es que necesito lograr que desde la vista de un elemento que en este caso sería una Persona con sus datos necesito crear un link que me redirija a un listado de tratamientos (algo así como lo que aparece en en los index de los modelos en la carpeta view que lista todos los registros) pero que solo muestre los tratamientos que tengan al id de la persona como atributo, he quedado algo estancado en eso así que cualquier indicación que puedan darme (o alguna idea diferente de como lograr el objetivo) será de mucha ayuda, gracias desde ya.

Un saludo.

Explica un poco mejor tal vez así se te pueda ayudar mas

  1. Tienes creado un paciente.

  2. Crear un link a los tratamientos de ese paciente como tal ¿desde donde piensas dirigirlo? de los botones que aparecen en las operaciones? en un botón creado por ti mismo?

Creo que lo que yo haría (teniendo en cuenta que tampoco tengo mucha experiencia en Yii) es lo siguiente debes crear una vista en el View del paciente por ejemplo llamada tratamientos.

Luego crearía dentro del controlador de pacientes un action algo parecido a esto




	public function actionTratamientos($id)

	{

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

			'model'=>$this->loadModel($id),

		));

	}



Ya con esto me redirige solamente cuando yo pase un id, y para eso haremos lo siguiente en el campo de operaciones ya sea del view del paciente o el update del paciente




      array('label'=>'Tratamientos del paciente', 'url'=>array('tratamientos', 'id'=>$model->id)),



Con esto cuando estés viendo los datos del paciente y le des a ese botón te redirigirá hasta sus tratamientos

Pero aun faltaría la estructura del view tratamientos, en mi caso no usaría un dataProvider sino mas bien un CGridView pero eso depende de cada quien, ademas no se hacerlo con el dataProvider jajaja.

La vista tratamientos debería quedar así.




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

	'data'=>$model,

	'attributes'=>array(

		array(

			'label'=>'Nombre:',

			'value'=>$model->nombre,  <-aqui iria el nombre del paciente segun como lo tengas en el modelo.

		),

	),

)); ?>




<h3><?php echo 'Tratamientos del paciente'; ?></h3>


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

        'id'=>'Tratamientos',

        'dataProvider'=>Tratamientos::model()->searchByPaciente($model->id), <-Este es el punto clave porque en el modelo de la tabla tratamientos deberemos crear esto.

		'filter'=>Tratamientos::model(),

		'columns'=>array(

			array ('header'=>'Lapso','name'=>'lapso','value'=>'$data->lapso','type'=>'text'), <- aqui irian los datos del tratamiento, el lapso lo puse copiando de otro código que tenia y lo deje así, tu lo modificas a tus necesidades.

	),

)); ?>




Por ultimo falta agregar el searchByPaciente($model->id) en el modelo de tratamientos y lo haría asi




	public function searchByPaciente($id)

	{

		// @todo Please modify the following code to remove attributes that should not be searched.


		$criteria=new CDbCriteria;


		$criteria->compare('id',$id,true); <- si ves aquí estamos comparando el id de la base de datos con el $id que estamos pasando mas arriba, los campos de abajo debes cambiarlos segun tus necesidades.

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

		$criteria->compare('lapso',$this->lapso,true);

		$criteria->order = 'lapso ASC';

		$criteria->compare('estatus', 1);


		return new CActiveDataProvider($this, array(

			'criteria'=>$criteria,

		));

	}



Espero que te sirva, a mi me sirvió para mostrar las vacaciones de un empleado en un sistema de recursos humanos y creo que es muy parecido a lo que tu necesitas.

Muchas gracias por la respuesta, y perdón por la demora, no había estado algo liado en otras cosas y no lo había podido probar, me funcionó perfecto, en realizad esperaba mostrar solamente la lista con los datos pero mostrarlos en forma de mantenedor es mucho mejor, gracias de verdad, me ha ayudado mucho en lo que tenía que hacer y además a entender varias cosas de yii que no manejaba bien, gracias nuevamente.

Saludos

Tranquilo, para eso estamos.

Hola de nuevo, probando todo me funciona perfecto salvo los filtros del mantenedor, alguien podría indicarme que elementos debo tocar para modificar eso? desde ya muchas gracias, un saludo.

casualidad voy a publicar sobre eso para que alguien me ayude sin encuentro respuesta te aviso