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

  • Lo reviso y te aviso...
  • edited 9:46
    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 9:46
    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
  • 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 9:46
    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 9:46
    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
  • Prueba de esta forma...
    $this->Unidad->find_first($this->Usuarios->unidad_id)
    
  • edited 9:46
    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.