Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

PHP OO armar objetos dinamicamente

Estas en el tema de armar objetos dinamicamente en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola y saludos a todos, los cuento, estoy trabajanado con una clase de php para mysql fantastica, no tiene nombre como tal "Database Abstraction class ...
  #1 (permalink)  
Antiguo 29/11/2011, 18:18
 
Fecha de Ingreso: febrero-2011
Mensajes: 18
Antigüedad: 13 años, 10 meses
Puntos: 9
Pregunta armar objetos dinamicamente

Hola y saludos a todos, los cuento, estoy trabajanado con una clase de php para mysql fantastica, no tiene nombre como tal "Database Abstraction class 1606" la encontre en classphp.org

funcioan asi:
require_once('../clases/crdb.php');

//aki me conecto normalmente a mysql

$db=new crdb($conexion_db);
$db->debug=false; //si se coloca en true, muestra los querys hechos por la clase crdb

$query = $db->users(); //users es el nombre de la tabla

$total_registros = count($query);

//luego bueno hay muchos metodos para obtener los resultados, aki un ejemplo

$query = $db->users->limit(0,20)->desc_order_by()->fields('alias','nombre');

$i=0;
foreach($query as $v){
$codigo[$i] = $v->cod;
$nombre[$i] = $v->nombre;
$apellido[$i] = $v->apellido;
$alias[$i] = $v->alias;
$estatus[$i] = $v->estatus;
$nivel[$i] = $v->nivel;
$boleta[$i] = $v->boletines;
$i++;
}


asi asi asi... muy bueno porque nunca lanzo nungun sql molestos (SELECT * FROM)

en si el problema biene a la hora de hacer filtros, la clase tine un metodo para condiciones "WHERE"

NOTA: soy nuevo trabajando con php y con objetos

$query = $db->users->nombre('danny'); //where nombre = 'danny'
$query = $db->users->nombre('!=','danny'); //where nombre != 'danny'
$query = $db->users->nombre('like'.'%danny'); //where nombre like '%danny'

lo que yo quisiera es hacer algo como almar los objetos para fabricar mi query dinamicamente;

algo como esto:

query = $db->users;

if(isset($_POST['filtro_nombre'])){

query .= ->nombre('like'.'%danny')

}

if(isset($_POST['filtro_apellido])){

query .= ->apellido('like'.'%alfonzo')

}


y que el resultado sea:

query = $db->users->nombre('like'.'%danny')->apellido('like'.'%alfonzo');

pero los objetos no los puedo manipular como si fueran cadenas

alguno de ustedes tiene idea de como hacer aca?



GRACIAS

Última edición por GatorV; 30/11/2011 a las 09:40
  #2 (permalink)  
Antiguo 30/11/2011, 09:41
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: armar objetos dinamicamente

De hecho casí lo tenías, lo correcto suponiendo que la clase funcione como debe:
Código PHP:
Ver original
  1. $query = $db->users;
  2.  
  3. if(isset($_POST['filtro_nombre'])){
  4.  
  5. $query->nombre('like'.'%danny');
  6.  
  7. }
  8.  
  9. if(isset($_POST['filtro_apellido'])){
  10.  
  11. $query->apellido('like'.'%alfonzo');
  12.  
  13. }

Saludos.
  #3 (permalink)  
Antiguo 30/11/2011, 13:49
 
Fecha de Ingreso: febrero-2011
Mensajes: 18
Antigüedad: 13 años, 10 meses
Puntos: 9
Respuesta: armar objetos dinamicamente

Hola Gracias, en realidad no funciona porque cuando haces

$query = $db->users;

se ejecuta automaticamente:

SELECT * FROM `users`

y $query es un array asociativo con toda las columnas de la tabla users
  #4 (permalink)  
Antiguo 30/11/2011, 13:52
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: armar objetos dinamicamente

Entonces lee la documentación de tu clase ya que debes de tener una forma de hacerlo, ya que es la forma correcta.

Revisa otros Access Layer como por ejemplo Propel o DoctrineDBAL que tienen métodos para armar querys y poder inyectar los parámetros sin problemas.

Etiquetas: armar, dinamicamente, mysql, objetos, registro, 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 09:28.