Duda sobre incluir varias consultas a la base de datos

edited octubre 2010 in Dudas/Problemas
Soy recién llegado a Kumbia hice los ejercicios de hola mundo, el crud y menus, pero no logro entender como incluir varias consultas dentro de una página;
    listar las categorias[/list:u]
    listar los producto[/list:u]
    y modificar el resultado según lo pulsado.
    Necesitaría donde encontrar algún tutorial donde poder darme cuenta del funcionamiento.

    Por ejemplo en una web de productos:

    Base de datos
productos:
id categorias subcategorias producto visible
1 lacteos leche U307 1
2 lacteos leche U308 1
3 enlatados atun U407 1
4 enlatados atun U408 1

controllers/productos_controller.php
<?php
class ProductosController extends ApplicationController{
    public function index(){
      $this->productos = $this->Productos->listarProductos();
    }
}
?>

models/productos.php
<?php
class Productos extends ActiveRecord
{		
	public function listarProductos(){
        return $this->find('columns: * ',"conditions: productos.visible>0");
    }   
}
?>

views/productos/index.phtml
<?php foreach($productos as $i): ?>
	<?php echo $i->producto ?>
<?php endforeach; ?>

<?php foreach($productos as $i): ?>
	<?php echo $i->categorias ?>
<?php endforeach; ?>

Aqui logro listar los productos y las categorias, pero las categorías deberían poder cambiar según lo que seleccione el usuario y el resultado de los producto también. No sé por donde empezar. Gracias por toda ayuda.

Comentarios

  • Tienes hacer otra consulta para las categorías, pero como intentas recorrer las categorías nunca funcionara porque no hay una consulta asociada a ella....

    Debes hacer lo mismo que haces para con productos...
  • edited 4:33
    Hola Deivinson; lamento no entender, hice estos cambios que pongo abajo y me dan errores Undefined variable: categorias y Invalid argument supplied for foreach() en index.phtml. Gracias mil gracias.


    controllers/productos_controller.php
    <?php
    class ProductosController extends ApplicationController{
     
        public function index(){
        	$this->productos = $this->Productos->listarProductos();
        	$this->productos = $this->Productos->listarCategorias();
        }
    }
    ?>
    

    models/productos.php
    <?php
    class Productos extends ActiveRecord
    {		
    	public function listarProductos(){
            return $this->find('columns: * ',"conditions: productos.visible>0");
        } 
        public function listarCategorias(){
            return $this->find('columns: categorias');
        }  
    }
    ?>
    

    views/productos/index.phtml
    <?php foreach($productos as $i): ?>
    	<?php echo $i->producto ?>
    <?php endforeach; ?>
    <?php foreach($categorias as $j): ?>
    	<?php echo $j->categorias ?>
    <?php endforeach; ?>
    
  • pero es cuestion de lógica, estas llamando con el mismo nombre la variable donde guardas la consulta de productos y categorías, que pasa en esos casos? obvio se sobreescribe el valor de una de las dos porque se llaman igual, eso no es KumbiaPHP, es pura lógica de cualquier lenguaje de programación...

    También si tienes un modelo llamado categorías, no sé porque lo ligas con el de productos (vacas con vacas, cochinos con cochinos)... estas colocando la consulta de categorías dentro de productos ilógico eso también...

    Esa consulta debe estar en el modelo que le corresponde, en este caso categorías...

    ¡Éxitos!
  • edited 4:33
    Hola Deivinson nuevamente; no me estoy explicando bien.
    Mi consulta es que cuando pulsas productos en una web aparecen 2 consultas:
    A-Para crear un menú lateral
    B-Todos los productos sin filtrar (a modo de ejemplo)

    [img]<!-- m --><a class="postlink" href="http://lh4.ggpht.com/_UcU5_LFlBvc/TLXOYzBvuHI/AAAAAAAABcw/87lW0QmjFz0/consultabd.jpg">http://lh4.ggpht.com/_UcU5_LFlBvc/TLXOY ... ultabd.jpg</a><!-- m -->[/img]

    ¿Cómo puedo hacer esto con Kumbia?

    Muchas gracias!

    José
  • edited 4:33
    el asunto que menciona es muy fácil de solucionar ya que depende de la maquetacion de la vista

    como ya han comentado la forma de obtener los datos mediante el modelo y el controller, es solo que lo visualice en la estructura que desea
    &lt;div id=&quot;menu_lateral&quot;&gt;
    &lt;?php
    //foreach para mostrar los datos de consulta A
    ?&gt;
    &lt;/div&gt;
    &lt;div id=&quot;productos&quot;&gt;
    &lt;?php
    //foreach para mostrar los datos de consulta B
    ?&gt;
    &lt;/div&gt;
    

    y el resto lo hace con css para posicionarlos según sus necesidades

    PD: en vez de foreach puede incluir partials como se indica en la documentación
Sign In or Register to comment.