Falla de ActiveRecord.

Saludos,
Estoy utilizando un AJAX form para enviar los datos al controlador, y que me muestre los resultados en un <div>, al parecer todo esta funcionando bien, pero ActiveRecord revienta cuando solicito mas de n registros (en mi caso 31)... retornando el siguiente error.

KumbiaWarning: Propiedad no definida
Propiedad indefinida 'nombre' asignada en el modelo 'anteproyecto' (BORRADOR DE LAPIZ )
En el modelo anteproyecto al ejecutar formulacion/saveanteproyecto/

#0 ActiveRecordException::display_warning(Propiedad no definida, Propiedad indefinida 'nombre' asignada en el modelo 'anteproyecto' (BORRADOR DE LAPIZ ), anteproyecto) called at [/home/mirabalj/ipoa/forms/db/active_record.php:189]
#1 ActiveRecord:GDN__set(nombre, BORRADOR DE LAPIZ ) called at [/home/mirabalj/ipoa/forms/db/active_record.php:913]
#2 ActiveRecord->dump_result(Array ([0] => 10-05-00-006,[id] => 10-05-00-006,[1] => BORRADOR DE LAPIZ ,[nombre] => BORRADOR DE LAPIZ ,[2] => 4-02-10-05-00 ,[partida] => 4-02-10-05-00 ,[3] => 0.40,[costo] => 0.40,[4] => 0.03,[IVA] => 0.03,[5] => 6,[cantidad] => 6,[6] => 2.40,[total] => 2.40)) called at [/home/mirabalj/ipoa/forms/db/active_record.php:426]
#3 ActiveRecord->find_all_by_sql(select insumo_id as id, insumo.nombre as nombre, insumo.partida_id as partida, insumo.conIVA as costo, (insumo.conIVA - insumo.sinIVA) as IVA, cantidad, (cantidad * insumo.conIVA) as total from anteproyecto, insumo where unidad_id = '10006' and accion_id = 'AC02.1' and fuente_id = '1' and gasto_id = '1' and insumo_id = insumo.id limit 0,32) called at [/home/mirabalj/ipoa/controllers/formulacion_controller.php:19]
#4 FormulacionController->saveanteproyecto() called at [(null):0]
#5 call_user_func_array(Array ([0] => FormulacionController Object ([] => 0,[] =>
[...]
[/home/mirabalj/ipoa/kumbia.php:201]
#6 Kumbia::main() called at [/home/mirabalj/ipoa/public/index.php:76]
Array

KumbiaWarning: Propiedad no definida
Propiedad indefinida 'partida' asignada en el modelo 'anteproyecto' (4-02-10-05-00 )

[...y asi continua para todos los campos y todos los registros, hasta que satura la memoria y el PHP envia el error siguiente:]

Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 15785313 bytes) in /home/mirabalj/ipoa/kumbia.php on line 272

El código en el controlador es el siguiente:

$this->articulos = $this->Anteproyecto->find_all_by_sql("select insumo_id as id, insumo.nombre as nombre, insumo.partida_id as partida, insumo.conIVA as costo, (insumo.conIVA - insumo.sinIVA) as IVA, cantidad, (cantidad * insumo.conIVA) as total from anteproyecto, insumo where unidad_id = '$unidad' and accion_id = '$accion' and fuente_id = '$fuente' and gasto_id = '$gasto' and insumo_id = insumo.id limit 0,32");

Nota: Use el limit para comprobar si era un asunto de la cantidad de registros, antes solicitaba todos los registros.
El código de la vista es:
&lt;table&gt;
	&lt;tbody&gt;
	&lt;? foreach($articulos as $articulo) { ?&gt;
	&lt;? $contador++; ?&gt;
	&lt;tr &lt;?= (($contador % 2) == 0) ? 'class=&quot;odd&quot;' &#58; '' ?&gt;&gt;
		&lt;th scope=&quot;row&quot; id=&quot;&lt;?= $articulo-&gt;insumo_id ?&gt;&quot;&gt;&lt;a href=&quot;index&#46;php?nro=&lt;?= $contador ?&gt;&quot;&gt;&lt;?= $articulo-&gt;nombre ?&gt;&lt;/a&gt;&lt;/th&gt;
		&lt;td&gt;&lt;?= $articulo-&gt;partida ?&gt;&lt;/td&gt;
		&lt;td&gt;&lt;?= $articulo-&gt;costo ?&gt; (&lt;?= ($articulo-&gt;IVA) ?&gt;)&lt;/td&gt;
		&lt;td&gt;&lt;?= $articulo-&gt;cantidad ?&gt;&lt;/td&gt;
		&lt;td&gt;&lt;?= $articulo-&gt;total ?&gt;&lt;/td&gt;
		&lt;td&gt;&lt;?= img_tag(&quot;borrar&#46;gif&quot;) ?&gt;&lt;/td&gt;
		&lt;? $total += $articulo-&gt;total ?&gt;
	&lt;/tr&gt;
	&lt;? } ?&gt;		
	&lt;/tbody&gt;
&lt;/table&gt;

Con menos registros funciona perfectamente.
Estoy usando la versión estable de Kumbia. Agradecería enormemente la ayuda que puedan dispensar. Estoy parado con este tema. Tengo la impresión de que es un bug.

Comentarios

  • Fatal error&#58; Allowed memory size of 33554432 bytes exhausted (tried to allocate 15785313 bytes)
    

    Indudablemente tu problema es de memoria debes aumentarla para quitar este comportamiento...
  • edited 6:03
    Tengo mis dudas, voy a probarlo, pero te puedo decir que la memoria colapsa debido a la información retornada por el error de Kumbia (devuelve lo mismo por cada campo y cada registro), no por la información obtenida de la base de datos (se aprecia claramente la vista)... no me parece que 32 registros sean tantos, o si?
  • No son muchos registro pero todo depende de la configuración de tu PHP en la memoria...

    Otra cosa muestra la estructura de esta tabla...
  • edited 6:03
    En efecto revisando el php.ini tenia en la sección Resource limits asignado 32M.

    memory_limit = 32M ; Maximum amount of memory a script may consume (8MB)

    Subí este valor hasta 64M, y me soporto no mas de 50 registros, así que finalmente opté por asignarle 128M (que me parece exagerado) y funciona perfectamente, imagino que soportara para mostrar hasta unos 100 registros.

    Las tablas son las siguientes:

    CREATE TABLE `insumo` (
    `id` varchar(12) collate utf8_unicode_ci NOT NULL,
    `nombre` text collate utf8_unicode_ci NOT NULL,
    `partida_id` varchar(15) collate utf8_unicode_ci NOT NULL default '',
    `sinIVA` decimal(14,2) NOT NULL default '0.00',
    `alicuota` decimal(5,2) NOT NULL default '0.00',
    `conIVA` decimal(14,2) NOT NULL default '0.00',
    `medida` varchar(30) collate utf8_unicode_ci default NULL,
    PRIMARY KEY (`id`),
    KEY `PARPSP` (`partida_id`)
    ) ENGINE=MyISAM;
    2799 registros

    CREATE TABLE `anteproyecto` (
    `id` int(10) unsigned NOT NULL auto_increment,
    `unidad_id` varchar(5) collate utf8_unicode_ci NOT NULL,
    `accion_id` varchar(10) collate utf8_unicode_ci NOT NULL,
    `fuente_id` int(10) unsigned NOT NULL,
    `gasto_id` int(10) unsigned NOT NULL,
    `insumo_id` varchar(12) collate utf8_unicode_ci NOT NULL,
    `anio` year(4) NOT NULL default '0000',
    `ene` int(10) unsigned NOT NULL default '0',
    `feb` int(10) unsigned NOT NULL default '0',
    `mar` int(10) unsigned NOT NULL default '0',
    `abr` int(10) unsigned NOT NULL default '0',
    `may` int(10) unsigned NOT NULL default '0',
    `jun` int(10) unsigned NOT NULL default '0',
    `jul` int(10) unsigned NOT NULL default '0',
    `ago` int(10) unsigned NOT NULL default '0',
    `sep` int(10) unsigned NOT NULL default '0',
    `oct` int(10) unsigned NOT NULL default '0',
    `nov` int(10) unsigned NOT NULL default '0',
    `dic` int(10) unsigned NOT NULL default '0',
    `cantidad` int(10) unsigned NOT NULL default '0',
    PRIMARY KEY (`id`),
    KEY `PROYECTO` (`unidad_id`,`accion_id`,`fuente_id`,`gasto_id`)
    ) ENGINE=MyISAM
    4474 registros

    Espero que la solución sirva de ayuda a otros.
    Mil gracias.
  • Veo en tu error inicial que el framework te muestra una exception porq no encuentra un campo especificamente "nombre" y viendo tu tabla no esta definido este campo obviamente aqui hay parte del problema... debe ser que en algun momento intenta acceder a ese atributo y kumbia no lo encuentra revisa esto por fa...
  • edited 6:03
    ...claro que si, "nombre" esta definido en la tabla insumo, incluso en el select utilizo el "as" para forzarlo a darle ese nombre. <!-- s;) --><img src="{SMILIES_PATH}/icon_wink.gif" alt=";)" title="Wink" /><!-- s;) -->
  • edited 6:03
    Pon en tu modelo $debug=true para ver qué consulta recibe ActiveRecord, así tendrás más pistas para resolverlo. Es muy raro que con sólo 100 registros se cuelgue el php. ¿lo has probado en otra máquina o en otra instalación?
Sign In or Register to comment.