Incluir mais de 1 condição na atualização de objeto. ...
HT
Incluir mais de 1 condição na atualização de objeto.  
 
  1. <?php
  2. Alguém sabe informar como posso incluir mais condições em uma atualização de objeto?.
  3. Quando buscamos um objeto e queremos atualizá-lo, mudamos alguma informação e damos um store(). Isso faz com com que o sistema gere o sql com o where indicando o ID do objeto. É neste where, quando rodar o "store()", que eu queria adicionar mais uma condição.
  4. Gerado
  5. UPDATE TABELA SET CAMPO = '1' WHERE (Num_Nota = '11111')
  6. Como eu quero
  7. UPDATE TABELA SET CAMPO = '1' WHERE (Num_Nota = '11111' AND Cod_Estabe = 1)
  8. ?>

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (5)


RL

Oi Herbety, eu trabalharia com id da nota se possível, não com o número. Mesmo assim, você pode fazer a alteração com update direto no código:

Exemplo 1:
 
  1. <?php
  2. try {
  3. $valor = '1';
  4. $nota = '11111';
  5. $cod = 1;
  6. TTransaction::open('base');
  7. $conn = TTransaction::get();
  8. $exec = $conn->prepare( "UPDATE TABELA SET CAMPO = " . $valor . " WHERE Num_Nota = '" . $nota . "'' AND Cod_Estabe = " . $cod . ";" );
  9. $exec->execute();
  10. TTransaction::close();
  11. new TMessage('info', 'Tabela alterada com sucesso!');
  12. } catch (Exception $e) {
  13. new TMessage('error', $e->getMessage());
  14. TTransaction::rollback();
  15. }
  16. ?>


Exemplo 2:
 
  1. <?php
  2. try {
  3. $valor = '1';
  4. $nota = '11111';
  5. $cod = 1;
  6. TTransaction::open('base');
  7. $conn = TTransaction::get();
  8. $exec = $conn->prepare( "UPDATE TABELA SET CAMPO = ? WHERE Num_Nota = '?'' AND Cod_Estabe = ?;" );
  9. $exec->bindParam(1, $rev, PDO::PARAM_STR);
  10. $exec->bindParam('11111', $rev, PDO::PARAM_STR);
  11. $exec->bindParam(1, $rev, PDO::PARAM_INT);
  12. $exec->execute();
  13. TTransaction::close();
  14. new TMessage('info', 'Tabela alterada com sucesso!');
  15. } catch (Exception $e) {
  16. new TMessage('error', $e->getMessage());
  17. TTransaction::rollback();
  18. }
  19. ?>


Espero ter ajudado.
RL

Desculpa, eu errei o código do segundo exemplo, mas acho que deu para pegar a ideia...
HT

Rodrigo Limão, deu sim. Mas era justamente o que eu não queria fazer manualmente. Pensei que teria uma forma manipulando diretamente o store() do objeto para evitar escrever o sql.
Mais agradeço sua ajuda.
NR

Isso vai contra o conceito principal do active record que é trabalhar sempre com um identificador único e exclusivo.

Além dos exemplos de conexão manual mencionados anteriormente, também tem as opções para update usando as classes do framework:
adianti.com.br/framework_files/tutor/index.php?class=CollectionBatch
adianti.com.br/framework_files/tutor/index.php?class=CollectionStati
HT

Nataniel Rabaioli, verdade, mas essa segunda opção já resolve a não escrever sql puro. Não tinha me atentado que existia essa possibilidade. Obrigado.