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:
Agradeço qualquer ajuda.
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:
- <?php
- public function ChaveDeAcessoDuplicada($ChaveDeAcesso, $IdCliente = 0)
- {
- TTransaction::open('sc3');
- /* Classe TCriteria. Em teste.*/
- $ChaveDuplicada = new TCriteria();
- $ChaveDuplicada->add(new TFilter('CHAVE_DE_ACESSO', '=', $ChaveDeAcesso));
- /* Caso seja edição de um registro, previne a alteração do
- campo Chave de Acesso para um valor existente em outro Cliente. */
- if($IdCliente > 0)
- {
- $ChaveDuplicada->add(new TFilter('ID_CLIENTE', '<>', $IdCliente), TExpression::AND_OPERATOR);
- }
- $ChaveDuplicada->dump();
- if($ChaveDuplicada->isEmpty())
- {
- return FALSE;
- }
- else
- return TRUE;
- TTransaction::close();
- }
- ?>
Agradeço qualquer ajuda.
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
Perfeito, Nataniel! Muito obrigado!
Posto aqui as duas soluções, por TCriteria e SQL, para o caso de alguém passar pelo mesmo problema: