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:
<table>
<tbody>
<? foreach($articulos as $articulo) { ?>
<? $contador++; ?>
<tr <?= (($contador % 2) == 0) ? 'class="odd"' : '' ?>>
<th scope="row" id="<?= $articulo->insumo_id ?>"><a href="index.php?nro=<?= $contador ?>"><?= $articulo->nombre ?></a></th>
<td><?= $articulo->partida ?></td>
<td><?= $articulo->costo ?> (<?= ($articulo->IVA) ?>)</td>
<td><?= $articulo->cantidad ?></td>
<td><?= $articulo->total ?></td>
<td><?= img_tag("borrar.gif") ?></td>
<? $total += $articulo->total ?>
</tr>
<? } ?>
</tbody>
</table>
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
Indudablemente tu problema es de memoria debes aumentarla para quitar este comportamiento...
Otra cosa muestra la estructura de esta tabla...
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.