Lançado Adianti Framework 7.6!
Clique aqui para saber mais
TCriteria como validação de dados Boa noite, galera. Tenho um método de retorno booleano para evitar que um Cliente preencha uma informação com um valor já existente em outro registro (uma constraint do tipo unique). Fiz uma primeira versão usando SQL diretamente, mas sei que isso não é recomendável. Então, lendo o fórum a e documentação do Adianti, estou tentando por TCriteria. Mas não tem jeito de funciona...
AM
TCriteria como validação de dados  
Boa noite, galera.

Tenho um método de retorno booleano para evitar que um Cliente preencha uma informação com um valor já existente em outro registro (uma constraint do tipo unique). Fiz uma primeira versão usando SQL diretamente, mas sei que isso não é recomendável. Então, lendo o fórum a e documentação do Adianti, estou tentando por TCriteria. Mas não tem jeito de funcionar: não ocorre nenhum erro, apenas o retorno TRUE - como se já existisse um valor igual na base de dados. Segue o método:

  1. <?php
  2.     public function ChaveDeAcessoDuplicada($ChaveDeAcesso$IdCliente 0)
  3.     {
  4.         
  5.         TTransaction::open('sc3');
  6.         
  7.         /* Classe TCriteria. Em teste.*/
  8.         $ChaveDuplicada = new TCriteria();
  9.         $ChaveDuplicada->add(new TFilter('CHAVE_DE_ACESSO''='$ChaveDeAcesso));
  10.         
  11.         /* Caso seja edição de um registro, previne a alteração do 
  12.            campo Chave de Acesso para um valor existente em outro Cliente. */
  13.         if($IdCliente 0)
  14.         {
  15.         
  16.             $ChaveDuplicada->add(new TFilter('ID_CLIENTE''<>'$IdCliente), TExpression::AND_OPERATOR);
  17.             
  18.         }    
  19.         
  20.         $ChaveDuplicada->dump();
  21.         
  22.         if($ChaveDuplicada->isEmpty())
  23.         {
  24.         
  25.             return FALSE;
  26.         
  27.         }
  28.         
  29.         else
  30.             return TRUE;                
  31.           
  32.         TTransaction::close();        
  33.                 
  34.     }
  35. ?>


Agradeço qualquer ajuda.

Curso completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto Quero me inscrever agora!

Comentários (2)


NR

Você está criando o criteria, mas não está "executando" a consulta. O TCriteria deve ser usado com a TRepository, por exemplo:
adianti.com.br/framework_files/tutor/index.php?class=CollectionLoadV
AM

Perfeito, Nataniel! Muito obrigado!

Posto aqui as duas soluções, por TCriteria e SQL, para o caso de alguém passar pelo mesmo problema:

  1. <?php
  2.     public function ChaveDeAcessoDuplicada($ChaveDeAcesso$IdCliente 0)
  3.     {
  4.         
  5.         TTransaction::open('sc3');
  6.         
  7.         /* Validação de Campo duplicado por TCriteria. */
  8.         $ChaveDuplicada = new TCriteria();
  9.         $ChaveDuplicada->add(new TFilter('CHAVE_DE_ACESSO''='$ChaveDeAcesso));
  10.         
  11.         /* Caso seja edição de um registro, previne a alteração do 
  12.            campo Chave de Acesso para um valor existente em outro Cliente. */
  13.         if($IdCliente 0)
  14.         {
  15.         
  16.             $ChaveDuplicada->add(new TFilter('ID_CLIENTE''<>'$IdCliente), TExpression::AND_OPERATOR);
  17.             
  18.         }    
  19.                 
  20.         $repository = new TRepository('Cliente'); 
  21.         $Clientes $repository->load($ChaveDuplicada);        
  22.               
  23.         $Counter 0;
  24.         
  25.         foreach($Clientes as $ClienteContador)        
  26.         {
  27.         
  28.             $Counter $Counter 1;            
  29.         
  30.         }
  31.         
  32.         return $Counter 0;   
  33.               
  34.        /* Validação de Campo duplicado por SQL. */
  35.         
  36.        /*
  37.        $vsSQL = "SELECT COUNT(1) AS CHAVE_EXISTENTE FROM sc3.cliente WHERE sc3.cliente.CHAVE_DE_ACESSO = '$ChaveDeAcesso'";
  38.         if($IdCliente > 0)
  39.         {
  40.             
  41.             $vsSQL = $vsSQL . " AND sc3.cliente.ID_CLIENTE <> '$IdCliente'";
  42.         
  43.         }      
  44.                     
  45.         //var_dump("String do SQL: '$vsSQL'");             
  46.         $conn = TTransaction::get();
  47.         $result = $conn->query($vsSQL);
  48.         
  49.         if ($result)
  50.         {
  51.             foreach($result as $ContKey)
  52.             {
  53.             
  54.                 return $ContKey['CHAVE_EXISTENTE'] >= 1;
  55.             
  56.             }                      
  57.         }
  58.         
  59.         else
  60.         {
  61.             return FALSE;
  62.         }    
  63.          
  64.         */
  65.           
  66.         TTransaction::close();        
  67.                 
  68.     }
  69. ?>