Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

149
Vistas
Cómo realizar una actualización condicional utilizando el ORM de Fatfree framework

La situación consiste en intentar usar F3 ORM (MySQL) con una máquina de estado. Una transacción/acción solo debe realizarse/mantenerse en la base de datos si el estado original permite que ocurra la transición.

El siguiente código carga el objeto, aplica el nuevo estado, crea una nueva transacción e intenta garantizar que el estado en la base de datos sea el esperado al actualizar el registro al nuevo estado.

 $instance = $f3->get('domainObject')->load(['id=?', $id]); $stateMachine = new StateMachine($instance, $config); $originalState = $instance->stateA; $stateMachine->apply($body['state']); $db->begin(); $db->exec( 'UPDATE domainObject SET stateA=? WHERE stateA=?', $instance->stateA, $originalState ); $instance->save(); $db->commit();

Aunque la actualización y el guardado están dentro de la misma transacción, la modificación ocurre incluso si la actualización no actualiza el registro (por ejemplo, cuando el stateA ha cambiado).

¿Cómo puedo usar F3 ORM para actualizar condicionalmente el modelo con una cláusula que establece que stateA debe tener un valor determinado?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Suponiendo que $instance es una instancia de DB\SQL\Mapper y que stateMachine->apply($body['state']) modifica $instance->stateA , entonces debería ser tan simple como:

 $instance = $f3->get('domainObject')->load(['id=?', $id]); $stateMachine = new StateMachine($instance, $config); $instance->save();

El método save() activa una consulta de UPDATE , solo si se ha cambiado un campo.

NB: tenga cuidado de que el método load() pueda devolver FALSE . Su código debe manejar ese caso.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda