Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

150
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda