Ahora KumbiaPHP está en Slack!!

Si deseas contactar con nosotros y de forma rápida, estamos en Slack:

http://slack.kumbiaphp.com/

Problema con Modelo ActiveRecord.

edited junio 2010 in Beta1
Estoy migrando (porfin) una aplicación de la 0.47 a Spirit Beta 1.

Tengo el siguiente modelo:


class Asignacion extends ActiveRecord {
// Total presupuestario asignado a la UEL
public function totalUnidad($anio, $unidad) {
if ($unidad) {
$monto = $this->sum("cuota", "conditions: anio=$anio AND unidad_id=$unidad");
} else {
$monto = $this->sum("cuota", "conditions: anio=$anio");
}
return ($monto > 0) ? $monto : "0.00";
}
}


Cuando intento llamar a la función desde el controlador da error:


$this->presupuesto = $this->Asignacion->totalUnidad($anio,$unidad);


Fatal error: Call to a member function fetch_one() on a non-object in /home/mirabalj/Web/kumbia/core/libs/db/active_record_base/active_record_base.php on line 1028

Tengo otros modelos y al menos el metodo find() funciona sin problemas, alguna idea?

Comentarios

  • edited noviembre -1
    Lo reviso y te aviso...
  • edited noviembre -1
    Aparentemente el error es por la función __construct del modelo (sin ella funciona), la cual no copie pensando que no era importante porque en la versión 0.4.7 andaba:

    // Clase constructor
    public function __construct(){
    $this->belongs_to('unidad');
    $this->belongs_to('accion');
    $this->belongs_to('fuente');
    $this->belongs_to('gasto');
    }

    Algo ha cambiado en la versión Spirit?
  • edited noviembre -1
    Lo solucioné llamando al constructor del padre, si hay otra manera se aceptan sugerencias:

    // Clase constructor
    public function __construct(){
    parent::__construct();
    $this->belongs_to('unidad');
    $this->belongs_to('accion');
    $this->belongs_to('fuente');
    $this->belongs_to('gasto');
    }

    Seria interesante documentarlo en http://wiki.kumbiaphp.com/Como_Usar_los_Modelos_en_KumbiaPHP
  • edited noviembre -1
    haz algo mejor en vez de constructor llamala initialize() es la que hace las veces de constructor para los modelos ActiveRecord...

          // Clase constructor
    public function initialize(){
    parent::__construct();
    $this->belongs_to('unidad');
    $this->belongs_to('accion');
    $this->belongs_to('fuente');
    $this->belongs_to('gasto');
    }
  • edited noviembre -1
    De esa forma, no carga la aplicación, de hecho ni siquiera manda un error. :/

    Otra cosa que estoy notando es que la convención del framework te obliga a usar un id numérico (al parecer), tengo en la tabla Unidad un id:varchar(5) y cuando uso:
    $this->Unidad->find_first($this->Usuarios->unidad_id)

    Devuelve los siguientes notices y un fatal error:

    Notice: Undefined offset: 0 in /home/mirabalj/Web/kumbia/core/libs/db/active_record_base/active_record_base.php on line 828

    Notice: Undefined offset: 0 in /home/mirabalj/Web/kumbia/core/libs/db/active_record_base/active_record_base.php on line 831

    Fatal error: Call to a member function add_quotes() on a non-object in /home/mirabalj/Web/kumbia/core/libs/db/active_record_base/active_record_base.php on line 831

    Agradecería una orientación en este sentido, ya que el campo integer considero no debería ser obligatorio, antes al menos funcionaba.
  • edited noviembre -1
    Intente con la siguiente instrucción pero devuelve otros errores:
    $this->Unidad->find_first("conditions: id='{$this->Usuarios->unidad_id}'")

    Warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'Array' was given in /home/mirabalj/Web/kumbia/core/libs/db/active_record_base/active_record_base.php on line 890

    Fatal error: Call to a member function fetch_one() on a non-object in /home/mirabalj/Web/kumbia/core/libs/db/active_record_base/active_record_base.php on line 748
  • edited noviembre -1
    Prueba de esta forma...

    $this->Unidad->find_first($this->Usuarios->unidad_id)
  • edited noviembre -1
    Gracias, pero se te pasó por alto: es la manera como la usaba inicialmente, esta dos posts mas arriba. :/

    Alguna otra idea?
Sign In or Register to comment.