Foros del Web » Programando para Internet » PHP »

CodeIgniter Problema con 2 foreach anidados (solo me devuelve 1 registro)

Estas en el tema de Problema con 2 foreach anidados (solo me devuelve 1 registro) en el foro de PHP en Foros del Web. Hola buenas tardes, Estoy haciendo una aplicación web con catalogo en codeiginter, dicho catalogo obviamente funciona a través de categorías y subcategorias, estas son de ...
  #1 (permalink)  
Antiguo 30/06/2013, 17:00
Avatar de ricky0123456  
Fecha de Ingreso: septiembre-2012
Ubicación: Caracas
Mensajes: 25
Antigüedad: 12 años, 2 meses
Puntos: 0
Pregunta Problema con 2 foreach anidados (solo me devuelve 1 registro)

Hola buenas tardes,

Estoy haciendo una aplicación web con catalogo en codeiginter, dicho catalogo obviamente funciona a través de categorías y subcategorias, estas son de primer nivel.. mi tabla llamada catalogo recoge todos los datos y los discrimina entre categorías y subcategorias a través de un id_padre, con el 0 categorías y con el id de la catgoria la subcategoria.. hasta ahí todo bien...

Bien cuando voy a mostrar la info en la vista al llamar a 2 ciclos for a través de foreach las categorías me las muestra bien, pero las subcategorias solo me muestra un registro de cada uno de ellos..

este es mi modelo
Código PHP:
public function get_categoria_front($id='') {
        
$sql $this->db->query(' select * from catalogo where id_categoria  ='.$id.' ');
return 
$sql;
        
    } 
esta es mi vista

Código HTML:
<?php $cat = $this->admin_categorias_model->get_categoria_front(0);?>
<?php foreach($cat->result() as $row) :?>
								
<p class="menu_head"><?php echo $row->categoria ;?></p>
									
<?php $sub = $this->admin_categorias_model->get_categoria_front($row->id);?>
									
<?php foreach($sub->result() as $row2):?>
<div class="menu_body"><?php echo $row2->sub_categoria ;?><a href=""></a></div>

<?php endforeach ;?>
										
<?php endforeach ;?> 
Como pueden observar no utilizo el controlador, decidí directamente hacer la llamada de la vista al modelo..

Gracias de antemano por su ayuda..
  #2 (permalink)  
Antiguo 30/06/2013, 17:18
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Respuesta: Problema con 2 foreach anidados (solo me devuelve 1 registro)

Quien mete datos en $sub para que luego los cojas con $sub->result() ?

Otra cosa, revisa el parametro $id de esta funcion get_categoria_front() porque no tiene sentido que por defecto valga string vacio ('') ... en todo caso NULL


Cita:
public function get_categoria_front($id='') {..}
__________________
Salu2!
  #3 (permalink)  
Antiguo 30/06/2013, 17:24
Avatar de ricky0123456  
Fecha de Ingreso: septiembre-2012
Ubicación: Caracas
Mensajes: 25
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Problema con 2 foreach anidados (solo me devuelve 1 registro)

Cita:
Iniciado por Italico76 Ver Mensaje
Quien mete datos en $sub para que luego los cojas con $sub->result() ?

Otra cosa, revisa el parametro $id de esta funcion get_categoria_front() porque no tiene sentido que por defecto valga string vacio ('') ... en todo caso NULL
Ok Italico76....

Gracias por la apreciacion,.. pero me podrías orientar???,... Que debo de hacer para solucionar mi problema??..
Por supuesto acepto la critica, es constructivo hacerlo,..

Gracias de antemano..
  #4 (permalink)  
Antiguo 01/07/2013, 20:49
Avatar de ricky0123456  
Fecha de Ingreso: septiembre-2012
Ubicación: Caracas
Mensajes: 25
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Problema con 2 foreach anidados (solo me devuelve 1 registro)

Cita:
Iniciado por Italico76 Ver Mensaje
Quien mete datos en $sub para que luego los cojas con $sub->result() ?

Otra cosa, revisa el parametro $id de esta funcion get_categoria_front() porque no tiene sentido que por defecto valga string vacio ('') ... en todo caso NULL
La prepotencia, la arrogancia y la burla hacia el mas débil no es un signo de hombría o sabiduría, más bien es de necedad e inmadurez.. Feliz día..
  #5 (permalink)  
Antiguo 01/07/2013, 21:10
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Respuesta: Problema con 2 foreach anidados (solo me devuelve 1 registro)

Amigo @ricky0123456: veo le molesto que no lo segui ayudando...... listo... lo primero separe bien MODELO - VISTA - CONTROLADOR o al menos siga su framework

Yo escribiria un metodo como el siguiente para recuperar las categorias del catalogo por Id

Código PHP:
<?php
        
// en el MODELO

        
public function getCategoriaFromCatalogo($id ,$where=null)
        {      
        
          
$this->db->where('id_categoria',$id);     
                  
          
          if (!empty(
$where))
          {
            if (
is_array($where)){
          
              foreach (
$where as $key => $value){
                
$this->db->where($key,$value);
               }                    
               
            }else{
               
$this->db->where($where);
            }            
               
          };            
            
          
$query $this->db->get('catalogo');    
          
          if (
$query->num_rows() > 0)
          {
             
$row $query->row();
             return 
$row->id_categoria;
          }else{
            return 
null;
          }
        }
Para buscar haria algo asi:

Código PHP:
$this->categoria_modelo->getCategoriaFromCatalog($id); 
ó

Código PHP:
$this->categoria_modelo->getCategoriaFromCatalog($id,$array_condiciones); 
Las condiciones estan como array asociativo:

Cita:
array('precio >'=>50000, 'color'='rojo');
__________________
Salu2!
  #6 (permalink)  
Antiguo 01/07/2013, 21:12
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 7 meses
Puntos: 461
Respuesta: Problema con 2 foreach anidados (solo me devuelve 1 registro)

En realidad estas preguntando dos veces por el mismo id, puedes explicarnos el porque?? para ver en que se te puede orientar
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #7 (permalink)  
Antiguo 01/07/2013, 21:46
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Respuesta: Problema con 2 foreach anidados (solo me devuelve 1 registro)

Ignora mi primera sugerencia, era para hacer un metodo de busqueda mas potente pero no aplica aqui, logica que necesitas es esta:

Las categorias y subcategorias son en registros del mismo tipo, asi que tienen los mismos campos y el tratamiento es igual

Cita:
[TABLA CATEGORIAS]
id_categoria
nombre
id_padre
Debes buscar QUE categorias tienen como padre la que el usuario ha seleccionado

Código PHP:
/// Modelo

<?php
public function get_categoria_front($id){          
  
$sql $this->db->query("select * from categorias where id_padre  = $id"); 
return 
$sql;          
}
Código PHP:
/// Vista

<?php 

// viene de un $_GET[] por ejemplo
$id_categoria_seleccionada 2;

// busco que categorias me tienen como padre
// posibilidades: 0,1 ... N registros
$hijas get_categoria_front($id);

if (empty(
$hijas))
   echo 
'-----';
else
   foreach (
$hijas as $hija){
       echo 
"{$hija->id_categoria} : {$hija->nombre}";
   }
OJO...... hace un tiempo no uso CodeIgniter y puede que el modelo no este del todo bien escrito..... hay que hacer siempre algunas consideranciones, solo segui esta vez tu codigo original

NOTA: para mi no tiene sentido que los metodos del modelo se llamanen _front o _back, o sea get_categoria_front() deberia ser la misma funcion que get_categoria_back()
__________________
Salu2!

Última edición por Italico76; 02/07/2013 a las 07:40
  #8 (permalink)  
Antiguo 03/07/2013, 03:24
Avatar de exatienda  
Fecha de Ingreso: julio-2013
Ubicación: Manresa, Barcelona
Mensajes: 227
Antigüedad: 11 años, 4 meses
Puntos: 21
Respuesta: Problema con 2 foreach anidados (solo me devuelve 1 registro)

Porqué no lo pruebas con el bucle while? Quizás es menos lioso que con los bucles For...

Ejemplo (fíjate solo en los múltiples while anidados y la llamada de los sql's):

Cita:
$seleccionar_TOP_5 = mysql_query("SELECT * FROM products_description ORDER BY products_viewed DESC LIMIT 5;") or die (mysql_error());
$num_rows = mysql_num_rows($seleccionar_TOP_5);
while ($row = mysql_fetch_array($seleccionar_TOP_5))
{
$CArticle_TOP_5 = $row['products_id'];
$NomArticle_TOP_5 = $row['products_name'];
$seleccionar_PVP = mysql_query("SELECT * FROM products WHERE products_id=".$CArticle_TOP_5." LIMIT 1;") or die (mysql_error());
$num_rows = mysql_num_rows($seleccionar_PVP);
while ($row = mysql_fetch_array($seleccionar_PVP))
{
$PVP_Article=round($row['products_price'],2);
}
$seleccionar_URL_Article = mysql_query("SELECT * FROM uri_mappings WHERE associated_db_id=".$CArticle_TOP_5." LIMIT 1;") or die (mysql_error());
$num_rows = mysql_num_rows($seleccionar_URL_Article);
while ($row = mysql_fetch_array($seleccionar_URL_Article))
{
$URL_Article=$row['uri'];
$Enllac="http://www.exabyteinformatica.com".$URL_Article;
}
}
__________________
cajas rack tpvs | impresoras
  #9 (permalink)  
Antiguo 04/07/2013, 07:22
Avatar de ricky0123456  
Fecha de Ingreso: septiembre-2012
Ubicación: Caracas
Mensajes: 25
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Problema con 2 foreach anidados (solo me devuelve 1 registro)

Cita:
Iniciado por Italico76 Ver Mensaje
Amigo @ricky0123456: veo le molesto que no lo segui ayudando...... listo... lo primero separe bien MODELO - VISTA - CONTROLADOR o al menos siga su framework

Yo escribiria un metodo como el siguiente para recuperar las categorias del catalogo por Id

Código PHP:
<?php
        
// en el MODELO

        
public function getCategoriaFromCatalogo($id ,$where=null)
        {      
        
          
$this->db->where('id_categoria',$id);     
                  
          
          if (!empty(
$where))
          {
            if (
is_array($where)){
          
              foreach (
$where as $key => $value){
                
$this->db->where($key,$value);
               }                    
               
            }else{
               
$this->db->where($where);
            }            
               
          };            
            
          
$query $this->db->get('catalogo');    
          
          if (
$query->num_rows() > 0)
          {
             
$row $query->row();
             return 
$row->id_categoria;
          }else{
            return 
null;
          }
        }
Para buscar haria algo asi:

Código PHP:
$this->categoria_modelo->getCategoriaFromCatalog($id); 
ó

Código PHP:
$this->categoria_modelo->getCategoriaFromCatalog($id,$array_condiciones); 
Las condiciones estan como array asociativo:

Hombre un poquito si que me molesto,...Pues la primera intervención que usted hizo fue un tanto insultante,..

Yo creo que estos foros están para que las personas que poseen conocimientos y deseen hacerlo, los compartan con quienes no..

Amigo nadie nace enseñado y en la vida si yo no se de algo y usted si, es muy posible que tambien suceda a la inversa.. es por eso que considero poco Honorable menospreciar a alguien o burlarse de él, por no tener un conocimiento.

NO osbtante, rectificar es de sabios.. !!!!
Muchas garcias por su respuesta y por su tiempo ... Sr. Italico76
Me ha sido de mucha ayuda!!!...

Etiquetas: anidados, codeigniter, devuelve, foreach, registro, select, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:35.