Foros del Web » Programando para Internet » PHP » Symfony »

Consulta doctrine

Estas en el tema de Consulta doctrine en el foro de Symfony en Foros del Web. Hola gente tengo las siguientes 3 tablas: http://pastebin.com/rAwyEDNp Lo que yo quiero hacer es seleccionar los mozos, que no esten asignados a un servicio en ...
  #1 (permalink)  
Antiguo 18/05/2011, 06:46
 
Fecha de Ingreso: agosto-2008
Mensajes: 88
Antigüedad: 16 años, 4 meses
Puntos: 0
Consulta doctrine

Hola gente tengo las siguientes 3 tablas:
http://pastebin.com/rAwyEDNp
Lo que yo quiero hacer es seleccionar los mozos, que no esten asignados a un servicio en una fecha determinada. Deberia recuperar los id de servicios que estan dentro de la fecha dada. Sacar los mozos que estan relacionados a esos id servicio y despues de mozos, obtener los mozos que no estan dentro de los anteriores.
Alguien me da una idea de como hacerlo en doctrine?
Gracias
  #2 (permalink)  
Antiguo 18/05/2011, 07:04
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Consulta doctrine

Postea el DQL que tengas, aunque no debería ser difícil, es un innerJoin de Mozos con Servicio y aplicando a Servicio un not between entre la fecha de inicio y la de fin.
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 18/05/2011, 10:15
 
Fecha de Ingreso: agosto-2008
Mensajes: 88
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Consulta doctrine

Yo arme el siguiente DQL:
$mozosAsignados = Doctrine_Query::create()
->select('m.idMozo')
->from('ServicioMozo m')
->innerJoin('m.Servicio s')
->where('s.fechaservicio=?', $fecha)
->fetchArray();
Este me devuelve los mozos que estan asignados a algun servicio.
Yo ahora quiero ver como saco de la tabla mozos los que me faltan
Gracias
  #4 (permalink)  
Antiguo 18/05/2011, 10:19
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Consulta doctrine

Si la hora de inicio y la de fin no importan, no seria en el where != en vez de = ?
__________________
http://es.phptherightway.com/
thats us riders :)
  #5 (permalink)  
Antiguo 18/05/2011, 10:21
 
Fecha de Ingreso: agosto-2008
Mensajes: 88
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Consulta doctrine

La hora de inicio y fin no me importa. Yo necesito saber para una fecha dada que mozos no estan asignados en ningun servicio. Entonces busco los mozos asignados a la fecha determinada y despues quiero obtener los mozos que no estan asignados
Lo que hice ahora es lo siguiente:
Código PHP:
$mozosAsignados Doctrine_Query::create()
                        ->
select('m.idMozo')
                        ->
from('ServicioMozo m')
                        ->
innerJoin('m.Servicio s')
                        ->
where('s.fechaservicio=?'$fecha)
                        ->
fetchArray();
        
$asignados = array();

        
$i 0;
        foreach (
$mozosAsignados as $m) {
            
$asignados[$i] = (int) $m['idMozo'];
            
$i++;
        }

            
$moz Doctrine_Query::create()
                            ->
select('a.*')
                            ->
from('Mozo a')
                            ->
where('a.id not in?'$asignados )
                            ->
execute(); 
Pero me salta
SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens

Última edición por agugut; 18/05/2011 a las 10:26
  #6 (permalink)  
Antiguo 18/05/2011, 10:39
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Consulta doctrine

Talves me este perdiendo algo, pero no seria algo así ?

Código PHP:
Ver original
  1. $mozosAsignados = Doctrine_Query::create()
  2.                 ->select('m.idMozo')
  3.                 ->from('Mozo m')
  4.                 ->innerJoin('m.Servicios s')
  5.                 ->where('s.fechaservicio != ?', $fecha)
  6.                 ->execute();
__________________
http://es.phptherightway.com/
thats us riders :)
  #7 (permalink)  
Antiguo 18/05/2011, 10:50
 
Fecha de Ingreso: agosto-2008
Mensajes: 88
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Consulta doctrine

el tema que ahi no estas usando la tabla ServicioMozo. Yo en la tabla mozos tengo los datos de todos los mozos, en la tabla servicios los servicios, donde esta su fecha y en la tabla ServicioMozo tengo idservicio e idmozo. Yo tendria que sacar de servicios, los id de servicios que se dan en la fecha dada. Despues tendria que sacar con esos ids de servicio, de la tabla serviciomozo los id de los mozos que estan ocupados. Y por ultimo sacar de la tabla mozo los id de mozos que no estan asignados.
Capaz que me estoy explicando mal
  #8 (permalink)  
Antiguo 18/05/2011, 11:02
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Consulta doctrine

Creo que no comprendes como funciona el DQL, no tenes que utilizar la tabla pivot, simplemente unir los modelos, Doctrine se encarga del resto, el DQL que te pase te tiene que traer el id de los mozos que no tienen un servicio a la hora X, lo probaste y te dio error ?, recuerda que en Doctrine no se relacionan Tablas, se relacionan Modelos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #9 (permalink)  
Antiguo 18/05/2011, 11:07
 
Fecha de Ingreso: agosto-2008
Mensajes: 88
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Consulta doctrine

Haciendo uso de esa consulta no me devuelve nada. Yo necesito los mozos que no estan asignados a ningun servicio en esa fecha, con el != en la fecha me devuelve los mozos que estan asignados a servicios en otra fecha
  #10 (permalink)  
Antiguo 18/05/2011, 11:15
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Consulta doctrine

Ahora si te entendi, probaste con NOT EXISTS ?, si ves que no te sale, subí algún fixture así lo puedo probar en local.
__________________
http://es.phptherightway.com/
thats us riders :)
  #11 (permalink)  
Antiguo 18/05/2011, 11:18
 
Fecha de Ingreso: agosto-2008
Mensajes: 88
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Consulta doctrine

Yo ahora probe lo siguiente y me dice:
$mozos = Doctrine_Query::create()
->select('a.*')
->from('Mozo a')
->where('a.id not exists(SELECT sm1.idMozo FROM ServicioMozo sm1
INNER JOIN sm1.Servicio s WHERE s.fechaservicio = ?)', $fecha)
->execute();
Couldn't find class sm1
  #12 (permalink)  
Antiguo 18/05/2011, 13:40
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Consulta doctrine

Sin datos de prueba es complicado, porque es medio al ojo, pero bueno, proba algo así:
Código PHP:
Ver original
  1. $q = Doctrine_Query::create()
  2.    ->select('m.id')
  3.    ->from('Mozo m')
  4.    ->where('NOT EXISTS (SELECT sm.idMozo
  5.                        FROM ServicioMozo sm
  6.                        INNER JOIN sm.Servicio s
  7.                        WHERE s.fechaServicio = ?)', $fecha);

o con NOT IN así:

Código PHP:
Ver original
  1. $q = Doctrine_Query::create()
  2.     ->select('m.id')
  3.     ->from('Mozo m')
  4.     ->where('m.id NOT IN (SELECT sm.idMozo
  5.                          FROM ServicioMozo sm
  6.                          INNER JOIN sm.Servicio s
  7.                          WHERE s.fechaServicio = ?)', $fecha);
__________________
http://es.phptherightway.com/
thats us riders :)
  #13 (permalink)  
Antiguo 18/05/2011, 17:09
 
Fecha de Ingreso: agosto-2008
Mensajes: 88
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Consulta doctrine

Anduvo el ultimo, lo voy a probar bien, pero por ahora anduvo...
Muchas Gracias
  #14 (permalink)  
Antiguo 05/05/2014, 21:48
 
Fecha de Ingreso: junio-2013
Mensajes: 4
Antigüedad: 11 años, 6 meses
Puntos: 0
Mensaje Respuesta: Consulta doctrine

Si alguien pudiera ayudarme con lo siguiente, es q soy nuevo con doctrine y tengo la siguiente consulta:
$query = new Doctrine_Query();
return $query->select('est.nombre_estructura')
->from('
DatEstructura est,
DatAccionControl acc,
DatAuditoria aud')
->where('acc.id_estructura_auditar = est.id_estructura AND
aud.dat_cumplimientoid_accion_control = acc.id_accion_control;')
->execute();

q en la BD me funciona bien, pero cuando la pongo en la modelo, me devuelve el sigt error:
"codMsg":3,"mensaje":"Ocurri\u00f3 un error interno del sistema. Por favor contacte al administrador.","detalles":"exception 'Doctrine_Connection_Pgsql_Exception' with message 'SQLSTATE[42P01]: Undefined table: 7 ERROR: falta una entrada para la tabla \u00abest\u00bb en la cl\u00e1usula FROM\nLINE 1: ...at_auditorias d3 WHERE d2.id_estructura_auditar = est.id_est...\n
si alguien sabe porq el error este q me responda por favor,
gracias de antemano

Etiquetas: doctrine, frameworks-y-php-orientado-a-objetos
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:14.