como recorrer datos anidados en base de datos?

edited noviembre 2007 in Dudas/Problemas
hola tengo 2 tablas que se relacionan, las cuales una es indicadores, y la otra es pregunta, la primera tiene su clave foranea en la segunda, y weno como intento hacer una encuesta, necesito mostrar las preguntas que pertenecen a un indicador y al lado colocar unas opciones a traves de radio buttons, a continuacion muestro algo de codigo, y las tablas que estoy usando en mi bd:


este es el controlador de la futura encuesta
<?php

class EncuestaController extends ApplicationController{

	public function index(){

		$this->indicadores = $this->Indicadores->find('order: id');
		
		if($this->request('modulo_id')){
			foreach ($this->indicadores as $indicadores){
				foreach ($indicadores->getPregunta() as $pregunta){

				}//foreach
			}//foreach

		}//del if
	}//del metodo adicionar

	public function preguntas($indicadores_id = null){
		$this->set_response('view');
		$indicadores = new Indicadores();
		$indicadores->id = $indicadores_id;
		$this->pregunta = $indicadores->getPregunta();
	}//del metodo componentes
	
	public function leyendaEst(){
		//indicando el tipo de respuesta
		$this->set_response('view');
	}

}//fin del encuentas controller


la vista de la encuesta:
<td style=' font-size: 10px; background: #EDF0F9;' width="675px">
			<h1 align="center">Realización de Encuesta</h1>
			<?= content()?>
			<table>
				<tr>
					<td align="left"><b>Modulo o Curso: 
					</td>
					<td align="left">  
						<select name="modulo_id">
			 			<option value="">Seleccione Modulo</option>
							 <?	
							 $Modulo = new Modulo();
							 $Mdisponible = $Modulo->find("conditions: programa_id='$nameUser->programa_id'");
							 foreach ($Mdisponible as $Mdisponibles){
							 	echo "<option value='$Mdisponibles->id'>$Mdisponibles->nombre";
							 }//fin del foreach
							 ?>
						 </select>	
					</td>
				</tr>
					<tr>
					<td align="left"><b>Instructor:   
					</td>
					<td align="left">
						<select name="usuario_id">
			 			<option value="">Seleccione Instructor</option>
							 <?	
							 $Usuario2 = new Usuario();
							 $Udisponible = $Usuario2->find("conditions: tipo_usuario='Instructor'");
							 foreach ($Udisponible as $Udisponibles){
							 	echo "<option value='$Udisponibles->id'>$Udisponibles->nombre_apellido";
							 }//fin del foreach
							 ?>
						 </select>	
					</td>
				</tr>
					</tr>
						<? foreach ($indicadores as $indicador): ?>
							<tr>
								<td>
									<table>
										<tr>
											<td>
												<strong><?= $indicador->nombre; ?></strong>
											</td>
										</tr>
										<tr>		
										<td colspan="8">
												    <? $p = new Pregunta(); ?>
													<? foreach ($indicador->getPregunta as $preguntas): ?>
													<tr>
														<td><b><?= $preguntas->enunciado; ?></td>
														<td align="center"></td>
													</tr>
													<? endforeach; ?>
										</td>
										</tr>
									</table>
								</td>
							</tr>
						<? endforeach; ?>
			</table>
		</td>

DROP TABLE IF EXISTS `indicadores`;
CREATE TABLE `indicadores` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `nombre` varchar(55) character set latin1 collate latin1_general_ci NOT NULL default '',
  `descrip` varchar(120) character set latin1 collate latin1_general_ci default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
DROP TABLE IF EXISTS `pregunta`;
CREATE TABLE `pregunta` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `enunciado` varchar(130) NOT NULL default '',
  `indicadores_id` int(10) unsigned NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;


Muchas gracias por la ayuda, de antemano.

Comentarios

  • hola tengo 2 tablas que se relacionan, las cuales una es indicadores, y la otra es pregunta, la primera tiene su clave foranea en la segunda, y weno como intento hacer una encuesta, necesito mostrar las preguntas que pertenecen a un indicador y al lado colocar unas opciones a traves de radio buttons, a continuacion muestro algo de codigo, y las tablas que estoy usando en mi bd:


    este es el controlador de la futura encuesta
    <?php
    
    class EncuestaController extends ApplicationController{
    
    	public function index(){
    
    		$this->indicadores = $this->Indicadores->find('order: id');
    		
    		if($this->request('modulo_id')){
    			foreach ($this->indicadores as $indicadores){
    				foreach ($indicadores->getPregunta() as $pregunta){
    
    				}//foreach
    			}//foreach
    
    		}//del if
    	}//del metodo adicionar
    
    	public function preguntas($indicadores_id = null){
    		$this->set_response('view');
    		$indicadores = new Indicadores();
    		$indicadores->id = $indicadores_id;
    		$this->pregunta = $indicadores->getPregunta();
    	}//del metodo componentes
    	
    	public function leyendaEst(){
    		//indicando el tipo de respuesta
    		$this->set_response('view');
    	}
    
    }//fin del encuentas controller
    

    ...
    DROP TABLE IF EXISTS `indicadores`;
    CREATE TABLE `indicadores` (
      `id` int(10) unsigned NOT NULL auto_increment,
      `nombre` varchar(55) character set latin1 collate latin1_general_ci NOT NULL default '',
      `descrip` varchar(120) character set latin1 collate latin1_general_ci default NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
    
    DROP TABLE IF EXISTS `pregunta`;
    CREATE TABLE `pregunta` (
      `id` int(10) unsigned NOT NULL auto_increment,
      `enunciado` varchar(130) NOT NULL default '',
      `indicadores_id` int(10) unsigned NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;
    


    Muchas gracias por la ayuda, de antemano.

    En la tabla Preguntas (faltaba la S) debes colocar la referencia a la clave foranea de la tabla Indicadores (la convención es Pluralizar los nombres de las tablas), quedaría así:
    CREATE TABLE `preguntas` (
      `id` int(10) unsigned NOT NULL auto_increment,
      `enunciado` varchar(130) NOT NULL default '',
      `indicadores_id` int(10) unsigned NOT NULL,
      PRIMARY KEY  (`id`),
      CONSTRAINT `FK_preguntas_indicador` FOREIGN KEY (`indicadores_id`)  
      REFERENCES `indicadores` (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;
    

    Recuerda tambien que debes colocar las asociaciones en los modelos que hacen referencias a las tablas de la bd, en Indicador -> has_many('preguntas') y en Pregunta -> belongs_to('indicadores').
Sign In or Register to comment.