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

una consulta sobre DQL al colocar un alias en el select

Estas en el tema de una consulta sobre DQL al colocar un alias en el select en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola. Hoy acabo de descubrir algo que estaba pasando inadvertido durante algun tiempo y pasa que cuando yo hago en la union de una tabla ...
  #1 (permalink)  
Antiguo 14/02/2011, 15:13
Avatar de Copia  
Fecha de Ingreso: noviembre-2009
Mensajes: 309
Antigüedad: 14 años, 4 meses
Puntos: 4
una consulta sobre DQL al colocar un alias en el select

Hola. Hoy acabo de descubrir algo que estaba pasando inadvertido durante algun tiempo y pasa que cuando yo hago en la union de una tabla con su detalle.
consulta:
Código PHP:
$q Doctrine_Query::CREATE()
                        ->
select('c.nombre AS Nombre')
                        ->
from('Cliente c')
                        ->
innerJoin('c.Clientexestadia ce')
                        ->
where('c.idcliente = ce.idcliente');
        
$rs $q->fetchArray(); 
Lo cual da este resultado:
Código PHP:
Array
(
    [
0] => Array
        (
            [
Nombre] => Katerine Cecilia
        
)


y al hacer esta misma consulta pero sin el alias obtengo lo siguiente:
Código PHP:
$q Doctrine_Query::CREATE()
                        ->
select('c.nombre')
                        ->
from('Cliente c')
                        ->
innerJoin('c.Clientexestadia ce')
                        ->
where('c.idcliente = ce.idcliente');
        
$rs $q->fetchArray(); 
Resultado:
Código PHP:
Array
(
    [
0] => Array
        (
            [
idcliente] => 4
            
[nombre] => Katerine Cecilia
        
)

    [
1] => Array
        (
            [
idcliente] => 5
            
[nombre] => Juan 
        
)

    [
2] => Array
        (
            [
idcliente] => 1
            
[nombre] => Luis Miguel
        
)


Porque tengo esta diferencia en los resultados?
__________________
Dejando una huella de mi existencia por la red en http://tiricaya.com
  #2 (permalink)  
Antiguo 14/02/2011, 15:22
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: una consulta sobre DQL al colocar un alias en el select

Que tal Copia, el DQL esta mal asi que no te fies mucho del resultado, no estas relacionando tablas, relacionas modelos, el DQL debería ser algo así:

Código PHP:
Ver original
  1. $q = Doctrine_Query::create();
  2. $q->select('c.nombre')
  3.   ->from('Cliente c')
  4.   ->innerJoin('c.Clientexestadia');
  5. $rs = $q->fetchArray();

no tenes que agregar en el where los id's como si fuera SQL, doctrine ya sabe como se relacionan(si definiste bien las relaciones).

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 14/02/2011, 22:22
Avatar de Copia  
Fecha de Ingreso: noviembre-2009
Mensajes: 309
Antigüedad: 14 años, 4 meses
Puntos: 4
Respuesta: una consulta sobre DQL al colocar un alias en el select

Solo unas consideraciones, la relaciones las genere de la base que tenia con mysql a yml y de ahi genere las bases para postgres y el propio mysql. Lo hize porque era mas facil y rápido, no se si hize bien pero me funciona hasta ahora.

SObre el DQL si estaba mal hecho, no domino mucho los Join por no decir nada, y si entendi que si la relación anda mal el resultado es muy distinto.

Una consulta relacionada con DQL, yo encontre la forma de hacer Transacciones no oficial de la siguiente manera, y tengo dudas de que realmente funcione.
Código PHP:
Ver original
  1. $conn = Doctrine_Manager::getInstance()->getCurrentConnection();
  2. $conn->beginTransaction();
  3. try{
  4. ...
  5. conn->commite
  6. }
  7. catch (Exception $e) {
  8. ....
  9. conn->rollback();
  10. }

Es la forma correcta?
__________________
Dejando una huella de mi existencia por la red en http://tiricaya.com
  #4 (permalink)  
Antiguo 15/02/2011, 15:09
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: una consulta sobre DQL al colocar un alias en el select

El mapeo de la bbdd a YML, puede fallar en algunos casos, deberías comprobar que este todo correcto, con respecto a las transacciones, con lo que estas mostrando deberia funcionar correctamente, igual te dejo un enlace, The fancy way: Unit Of Work.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #5 (permalink)  
Antiguo 15/02/2011, 15:50
Avatar de Copia  
Fecha de Ingreso: noviembre-2009
Mensajes: 309
Antigüedad: 14 años, 4 meses
Puntos: 4
Respuesta: una consulta sobre DQL al colocar un alias en el select

Voy a revisar el mapeo, y revisar el enlace.

Una consulta mas, esta vez relacionado con UPDATE, en la documentacion dice lo siguiente:
Código PHP:
Ver original
  1. UPDATE <component_name>
  2. SET <col_name1> = <expr1> ,
  3. <col_name2> = <expr2>
  4. WHERE <where_condition>
  5. ORDER BY <order_by>
  6. LIMIT <record_count>

Entonces como hago para incluir mas de una variante en SET.
Esta sentencia no funciona.
Código PHP:
Ver original
  1. $a = Doctrine_Query::create()
  2.                             ->update('arribos')
  3.                             ->set('direccion',$direccion,'numvuelo',$numeroVuelo,'horallegada',$hora,'numpersonas',$numpersonas )
  4.                             ->where('idarribos = ?', $idArribos);
  5.          $a->execute();

Como se implementa lo que dice la documentación?
__________________
Dejando una huella de mi existencia por la red en http://tiricaya.com
  #6 (permalink)  
Antiguo 15/02/2011, 16:09
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: una consulta sobre DQL al colocar un alias en el select

Pásalo como array, algo asi:

Código PHP:
Ver original
  1. $q = Doctrine_Query::create()
  2.    ->update('arribos')
  3.    ->set(array(
  4.         'direccion' => $direccion,
  5.         'numvuelo', => $numeroVuelo,
  6.         'horallegada' => $hora,
  7.         'numpersonas' => $numpersonas))
  8.    ->where('idarribos = ?', $idArribos);
  9. $q->execute();

Si la documentación te deja dudas, mira directamente el código, es fácil encontrar las cosas, sigue el PEAR style y te va a ayudar a ver como funciona realmente.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #7 (permalink)  
Antiguo 15/02/2011, 16:30
Avatar de Copia  
Fecha de Ingreso: noviembre-2009
Mensajes: 309
Antigüedad: 14 años, 4 meses
Puntos: 4
Respuesta: una consulta sobre DQL al colocar un alias en el select

Muchas gracias nuevamente, justo hiva a comentar que encontre una solucion en un foro de symfony asi:
Código PHP:
Ver original
  1. $a = Doctrine_Query::create()
  2.                             ->update('arribos')
  3.                             ->set('direccion','?',$direccion)
  4.                             ->set('numvuelo','?',$numeroVuelo)
  5.                             ->set('horallegada','?',$hora)
  6.                             ->set('numpersonas','?',$numpersonas )
  7.                             ->where('idarribos = ?', $idArribos);

Y con la forma que me da ya son dos los modos que conosco :).

Tengo que investigar que es PEAR style..
__________________
Dejando una huella de mi existencia por la red en http://tiricaya.com
  #8 (permalink)  
Antiguo 16/02/2011, 12:34
Avatar de Copia  
Fecha de Ingreso: noviembre-2009
Mensajes: 309
Antigüedad: 14 años, 4 meses
Puntos: 4
Respuesta: una consulta sobre DQL al colocar un alias en el select

Siguiendo con DQL, tengo una consulta al trabajar con los modelos.
Si yo quiero hacer una insercion lo que se hace es:
Código PHP:
Ver original
  1. $narribo = new Arribos();
  2.             $narribo->idarribos = $arriboid;
  3.             $narribo->idemptransporte = $idempTransport;
  4.             $narribo->direccion = $direcArribo;
  5.             $narribo->numvuelo = $numVuelo;
  6.             $narribo->horallegada = $horaArribo;
  7.             $narribo->numpersonas = $numPersonas;
  8.             $narribo->save();

Mi pregunta es como se hace para guardar dentro de la misma clase Arribos, yo lo intente así:
Código PHP:
Ver original
  1. $narribo->idarribos = $arriboid;
  2.             $this->idemptransporte = $idempTransport;
  3.             $this->direccion = $direcArribo;
  4.             $this->numvuelo = $numVuelo;
  5.             $this->horallegada = $horaArribo;
  6.             $this->numpersonas = $numPersonas;
  7.             $this->save();
Bajo el criterio que Arribos deriva de BaseArribos y entonces tiene todos sus métodos, pero me da un error en $this->save().

Una consulta mas para que sirver los hidrators creo que asi se lleman.
__________________
Dejando una huella de mi existencia por la red en http://tiricaya.com
  #9 (permalink)  
Antiguo 17/02/2011, 18:19
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: una consulta sobre DQL al colocar un alias en el select

Que tal Copia, que error te muestra ?, envolve el save en un try && catch y comproba que Exception te lanza, algo asi:

Código PHP:
Ver original
  1. ...
  2. $this->idarribos = $arriboid;
  3. $this->idemptransporte = $idempTransport;
  4. $this->direccion = $direcArribo;
  5. $this->numvuelo = $numVuelo;
  6. $this->horallegada = $horaArribo;
  7. $this->numpersonas = $numPersonas;
  8. ...
  9. try {
  10.    $this->save();
  11. } catch(Doctrine_Exception $e) {
  12.    var_dump($e);
  13. }

y te dejo una referencia a los hydrators.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)

Etiquetas: alias, select
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 22:49.