Validar retorno nulo de $query->execute()

176 views
Skip to first unread message

Rodrigo Ruiz Fuentes

unread,
Jan 7, 2010, 8:03:04 AM1/7/10
to symfo...@googlegroups.com
Estimados,
hasta hace poco siempre trabaj� con symfony 1.0.X + Propel, ahora me he
visto en la obligaci�n de pasar a 1.2.X + Doctrine.
Mi consulta es sencilla y estoy bastante intrigado. Tengo una tabla que
est� vac�a, hago una consulta sobre ella y retorno los datos con
$q->execute(), al tratar de validar en la accion si viene vacia (si no
trae datos) lo hago con un if ($res) {}, donde $res =
Doctrine::getTable('Tabla)->getAlgo($id), sin embargo, y como dije
anteriormente la tabla no tiene datos, pero siempre entra al if, como si
trajera datos, hago un dump de lo que $res tiene y es mucha info que no
se de donde la trae, si lo hago con $q->fetchArray() no entra al if, y
funciona bien, sin embargo quiero usar los objetos y no arreglos generados.

Saludos cordiales.-

--
Rodrigo Ruiz Fuentes

Rodrigo Ruiz Fuentes

unread,
Jan 7, 2010, 1:39:50 PM1/7/10
to symfony-es
Amigos,
si alguien me puede ayudar por favor, es una tontera que me tiene
detenido desde ayer... necesito saber como validar si un $q->execute()
trae datos o no. Tengo lo siguiente:

RemPermisoTable.class.php
public function getPermisosPersona($id)
{
$q = $this->createQuery('r')
->where('r.rem_persona_id = ?', $id)
->addOrderBy('r.id desc');
return $q->execute();
}

actions.class.php
public function executePermisos()
{
$this->rem_persona = Doctrine::getTable('RemPersona')->find($this-
>getRequestParameter('id'));
$this->permisos = Doctrine::getTable('RemPermiso')->getPermisosPersona
($this->getRequestParameter('id'));
}

y en permisosSuccess.php
<?php if (!$permisos):?>
HTML
<?php else:?>
<?php print_r($permisos)?>
<?php endif;?>

y siempre ejecuta el print_r($permisos) aún cuando no traiga tuplas, y
lo que muestra es info de la tabla que está relacionada a RemPermisos,
en este caso RemPersona.
Lo único que necesito es poder validar con algo si la consulta trae
resultados o no, como $permisos->numRows() o algo así.

Saludos!

deandra...@gmail.com

unread,
Jan 7, 2010, 9:39:42 PM1/7/10
to symfo...@googlegroups.com
Has probado el count($q)
Enviado desde mi dispositivo movil BlackBerry® de Digitel.

aflo...@gmail.com

unread,
Jan 8, 2010, 2:51:02 AM1/8/10
to symfony-es
puedes usar el metodo count, pero para ello debes usarlo en un objeto
query, es decir lo puedes invocar antes de llamar al execute()

RemPermisoTable.class.php
public function getPermisosPersona($id)
{
$q = $this->createQuery('r')
->where('r.rem_persona_id = ?', $id)
->addOrderBy('r.id desc');


return $q->execute();

aflo...@gmail.com

unread,
Jan 8, 2010, 2:53:42 AM1/8/10
to symfony-es
puedes usar el metodo count, pero para ello debes usarlo en un objeto
query, es decir lo puedes invocar antes de llamar al execute()

RemPermisoTable.class.php
public function getPermisosPersona($id)
{
$q = $this->createQuery('r')
->where('r.rem_persona_id = ?', $id)
->addOrderBy('r.id desc');

$numero_registros = $q->count();

return $q->execute();

}

Rodrigo Ruiz Fuentes

unread,
Jan 8, 2010, 11:13:20 AM1/8/10
to symfo...@googlegroups.com
El 08/01/2010 4:53, aflo...@gmail.com escribi�:

De acuerdo, lo he probado y efectivamente devuelve el valor 0 cuando la
consulta no trae datos. Sin embargo, como la llamada se hace desde la
acci�n con $var =
Doctrine::getTable('RemPermiso')->getPermisosPersona(), necesito
comprobar si $var es nulo, y si hago count($var) me devuelve 1. Al
parecer getTable() nunca devuelve nulo, aun cuando haga un return null
desde getPermisosPersona().

Saludos y gracias por la ayuda.

--
Rodrigo Ruiz Fuentes

Rodrigo Ruiz Fuentes

unread,
Jan 8, 2010, 11:31:07 AM1/8/10
to symfony-es
OK, estaba equivocado, si evaluo con count() antes del return a la
accion y devuelvo null, $var queda sin asignación y es posible hacer
la comparación if (!$var):
Muchas gracias por todo.

PD: me parece incomodo eso si hacer una validacion en
RemPermisosTable.class.php de la forma:

if ($q->count() == 0) return null;
else return $q->execute();

con Propel solo se hacia el return self::doSelect($q) y si era nulo la
asignación a la variable de destino tampoco se hacia y se podía
comparar con if($var).- ya se enredo la cosa.-

Gracias!

On 8 ene, 13:13, Rodrigo Ruiz Fuentes <rru...@gmail.com> wrote:
> El 08/01/2010 4:53, aflor...@gmail.com escribi :

Reply all
Reply to author
Forward
0 new messages