Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/10/2013, 08:20
mathiasmontiel
 
Fecha de Ingreso: febrero-2013
Mensajes: 163
Antigüedad: 11 años, 3 meses
Puntos: 1
MVC traer registros en un array

Hola, estoy tratando de manipular un código pero tengo un problema al traer el resultado de una consulta y pasarlo a la vista. Primero les voy a mostrar el código original, que sí funciona. Este código trae el resultado de una consulta, trae 1 único registro en un array, y de ahí puedo manipularlo a gusto. Omití mucho código que no es necesario mostrar:

database.php
Código PHP:
<?php
private static $db_host 'localhost';
private static 
$db_user 'root';
private static 
$db_pass '';
protected 
$db_name 'database';
protected 
$query;
protected 
$rows = array();
private 
$conn;

# (...)

abstract class DBAbstractModel {
    protected function 
get_results_from_query() {
        
$this->open_connection();
        
$result $this->conn->query($this->query);
        while (
$this->rows[] = $result->fetch_assoc());
        
$result->close();
        
$this->close_connection();
        
array_pop($this->rows);
    }
}
?>
modelo.php
Código PHP:
<?php
require_once('mvc/core/database.php');

class 
Usuario extends DBAbstractModel {
    public 
$nick;
    public 
$permiso;
    public 
$producto;
    private 
$clave;

    public function 
get($user_nick='',$user_clave='') { 
        if(
$user_nick != '') {
            
$this->query "
                SELECT nick, permiso
                FROM usuarios
                WHERE nick = '$user_nick' and clave = '$user_clave'
            "
;
            
$this->get_results_from_query();
        }
        if(
count($this->rows) == 1) {
            foreach (
$this->rows[0] as $propiedad=>$valor) {
                
$this->$propiedad $valor;
            }
        }
    }
    
    
# (...)
}
?>
controlador.php
Código PHP:
<?php
require_once('constantes.php');
require_once(
'modelo.php');
require_once(
'vista.php');

function 
handler() {

    
# (...)
    
if (isset($_POST['login'])) {
        if (!empty(
$_POST['nick']) && !empty($_POST['clave']) ) {
            
$usuario_data helper();
            
$usuario set_obj();
            
$usuario->get($usuario_data['nick'], $usuario_data['clave']);
    
            
$data = array(
                
'nick'=>$usuario->nick,
                
'permiso'=>$usuario->permiso,
            );
            
            echo 
$data['producto'];
        } else {
            
# (...)
        
}
    } else {
        
# (...)
    
}
}

# (...)

function set_obj()
{
    
$obj = new Usuario();
    return 
$obj;
}
?>
Esto imprimiría el campo 'producto' del registro obtenido. Bueno, en vez de <?php echo $data['producto']; ?> tengo <?php retornar_vista(VISTA_INICIO, $data); ?>, y desde vista.php manipulo el array.

Pero ahora estoy tratando de traer varios registros

modelo.php
Código PHP:
<?php
require_once('mvc/core/database.php');

class 
Usuario extends DBAbstractModel {
    public 
$nick;
    public 
$permiso;
    public 
$producto;
    private 
$clave;

    public function 
get() {
        
$this->query "
            SELECT producto, precio
            FROM productos
        "
;
        
$this->get_results_from_query();
    
        if(
count($this->rows) >= 1) {
            foreach (
$this->rows as $registro=>$propiedad) {
                
$this->$registro $propiedad;
            }
        }
    }
    
    
# (...)
}

?>
Ahora estoy trayendo todos los registros, pero cómo agarro esos registros desde el controlador?

controlador.php
Código PHP:
<?php
require_once('constantes.php');
require_once(
'modelo.php');
require_once(
'vista.php');

function 
handler() {

    
# (...)

    
if ($_GET['p'] == 'consulta') {
        
$usuario set_obj();
        
$usuario->get();
        
        
$data = array(
            
'producto'=>$usuario->producto
            
'precio'=>$usuario->precio
        
);
            
        echo (
MOSTRAR TODOS LOS REGITROS)
    } else {
        
# (...)
    
}
}
?>
Cómo hago para imprimir todos los campos 'producto' y 'precio'?
Creo que no estoy manejando bien el foreach
Código PHP:
<?php
foreach ($this->rows as $registro=>$propiedad) {
    
$this->$registro $propiedad;
}
?>
Sé que $propiedad es el campo, por ejemplo $propiedad['producto'] mostraría el campo 'producto' de todos los registros. Pero a partir de ahi ya me pierdo, no sé cómo apartar $propiedad['producto'] y $propiedad['precio'] para poder manipularlo desde la vista. Estoy intentando de varias formas pero no consigo hacer que funcione. No estoy acostumbrado a este tipo de sistemas, estoy muy verde todavía...

Última edición por mathiasmontiel; 07/10/2013 a las 08:26