Closed asullom closed 11 years ago
-- Probé haciendo anio VARCHAR(4) NOT NULL DEFAULT '0', -- y no funcionó, modifiqué la clase class KumbiaActiveRecord { ... 609 if ($field['Null'] == 'NO' && !(isset($field['Default']) && $field['Default'])) { 610 $this->not_null[] = $field['Field']; 611 }
... cambiar por
609 if ($field['Null'] == 'NO' && !(isset($field['Default']) )) { 610 $this->not_null[] = $field['Field']; 611 }
... } -- y si funcionó para el update, pero para el create si no funciona bien
-- espero una pronta solucion. -- GRACIAS
//Mientras se corrigue hagamos unicamente lo siguiente al momento de editar, en nuestro controller:
if(EjercicioContable::saveRecord('update',$ejercicio_contable->to_array(), Input::post('ejercicio_contable'), array('id'=>$id))){ DwMessage::valid('El ejercicio_contable se ha actualizado correctamente!'); return DwRedirect::toAction('listar'); }
//y listo. solo es una salida
Buenas asullom Nunca un create, sin que existan todos los valores para los campos NOT NULL, se creará. Si no te da el error el ActiveRecord lo dara la base de datos que no lo dejara crear.
Sobre el editar, ya es otra cuestión. normalmente un ActiveRecord es un objeto del registro que se envia a la bd. si tu creas uno con menos atributos, estara asi. El uso de un ActiveRecord es diferente a usar sql Y hay varias maneras para solucionar eso un es cargar antes el registro que quieres cambiar, pasarle los cambios y update otra es usar sql directo pero hay más formas
por cierto mejor que cambies tu campo anio a tipo YEAR en vez de usar un VARCHAR(4)
Creo que estas enfocando mal el problema, con esas soluciones.
Si quieres pasate por el IRC y te ayudamos con ese problema y a entenderlo mejor.
Estimado @asullom:
La solución que planteas es incorrecta, debido a que modificas el core y en caso de haber una actualización perderías todo (la de editar el KumbiaActiveRecord)
Te hemos estado esperando en el irc: http://www.kumbiaphp.com/blog/irc/
Pero en la mayor brevedad se actualizará el repo para tener una mayor claridad a la hora de actualizar un registro.
Gracias por tu interés y recuerda que tu feedback es muy importante para nosotros.
Sorry, me confundiió el metodo del model para Recurso:
public static function setRecurso($method, $data, $optData=null) {
...
}
// para mi tabla, este método lo reemplazé por:
public function saveRecord($bind, $id = null) { // estilo muy flexible
$obj = new EjercicioContable($bind); //Se carga los datos con los de las tablas
$method = empty($id) ? 'create':'update';
if ($method == 'update'){
$obj = $obj->find_first($id); //Se reemplaza los datos con los del registro especificado
}
//B1. Verifico que no exista otro ejercicio_contable, y si se encuentra inactivo lo activo
$objt= new EjercicioContable($bind); // para las condiciones
$conditions = empty($id) ? "anio='$objt->anio' AND nombre='$objt->nombre' " : "anio='$objt->anio' AND nombre='$objt->nombre' AND id != '$id'";
$old = new EjercicioContable();
if($old->find_first($conditions)) {
if($method=='create' && $old->esta_activo != TRUE) {
$obj->id = $old->id;
$obj->esta_activo = TRUE;
$method = 'update';
} else {
DwMessage::info('Ya existe un ejercicio_contable registrado bajo esos parámetros.');
return FALSE;
}
}
//Fin B1
return ( $method == 'create' ? $obj->$method() : $obj->$method($bind) ) ? $obj : FALSE;
//y en el controller sería: /* * Método para agregar / public function agregar() { if (Input::hasPost('ejercicio_contable')) { $ejercicio_contable = Input::post('ejercicio_contable'); $ejercicio_contable["esta_activo"] = TRUE; $ejercicio_contable["empresa_id"] = 1; $ejercicioContableData = new EjercicioContable(); $ejercicio_contable_db = $ejercicioContableData->saveRecord($ejercicio_contable); if ($ejercicio_contable_db) { DwMessage::valid(sprintf('El ejercicio_contable %s se ha registrado correctamente!', $ejercicio_contable_db->nombre), TRUE); return DwRedirect::toAction('listar'); }else { DwMessage::warning('Lo sentimos, pero este ejercicio_contable no se puede registrar.'); } } $this->page_title = 'Agregar ejercicio_contable'; }
//Gracias por su atención, mi skype es:asullom
Hola!
Veo que te estás complicando demasiado, pásate mañana por el irc de kumbiaphp para explicarte mejor.
Gracias por tu interés.
Gracias Iván (argordmel) por la atencion personalizada. Ticket superada gracias a la pronta actualización del ActiveRecord http://www.kupaste.com/ver/748
Ya volvía a tu forma particular de setear.
Gracias por todo.
Hola Ivan, sabes en el método update() de ActiveRecord ( http://www.kupaste.com/ver/748 ) cambiar $this->find_first(); //por $this->find_first($this->id); //para que no coja los datos del primer registro de la tabla, sino del registro actual (current) [20/02/2013 06:23:45 a.m.] Angel Sullon: saludos
en tu ultimo 150 commits sigue =
-- Por ejemplo: CREATE TABLE ejercicio_contable ( id BIGINT NOT NULL AUTO_INCREMENT, anio VARCHAR(4) NOT NULL, nombre VARCHAR(50), PRIMARY KEY (id) ) -- no me permite editar el registro sin actualizar el campo 'anio', en mi formulario tengo que enviar si o si el campo 'anio'. no necesito enviar ese campo yaque al crear lo llené, no debo tocar ese campo.
Error: El campo anio no puede ser nulo
Gracias.