Conheça as melhorias da versão 8.0, 8.1, 8.2!
Clique aqui para saber mais
Problema com TCriteria Boa tarde a todos! Está acontecendo algo que no mínimo é estranho. Montei um método onde ele recebe um TCriteria como parâmetro. Esse TCriteria é montado baseado em escolhas do usuário. Esse TCriteria é utilizado como base para construir outros 3 TCriteria diferentes. A questão é que se eu der um var_dump no $param logo no início do método ele está exatamento como enviado pe...
WS
Problema com TCriteria  
Boa tarde a todos!

Está acontecendo algo que no mínimo é estranho.

Montei um método onde ele recebe um TCriteria como parâmetro. Esse TCriteria é montado baseado em escolhas do usuário.
Esse TCriteria é utilizado como base para construir outros 3 TCriteria diferentes.

A questão é que se eu der um var_dump no $param logo no início do método ele está exatamento como enviado pelo outro método, mas se der um var_dump no $param no final, depois de ter criado os outros 3 TCriteria ele terá recebido os filtros dos TCriteria contruidos abaixo, sendo que em nenhum momento eu atribui os filtros a ele.

Alguem sabe o que estaria acontecendo?

Segue uam simulação do código abaixo:

 
  1. <?php
  2. public static function onbBuildDashboard($param)
  3. {
  4. try
  5. {
  6. if( $param != NULL )
  7. {
  8. // 1 criteria
  9. $criteria = $param;
  10. $repository = new TRepository('MsMsgLog');
  11. $criteria->setProperty('order' , 'data_alt');
  12. $msmslog_total = $repository->load($criteria);
  13. // 2 criteria
  14. $criteria_sucesso = $param;
  15. $criteria_sucesso->add(new TFilter('status', '=', 'S'));
  16. $msmslog_sucesso = $repository->load($criteria_sucesso);
  17. // 3 criteria
  18. $criteria_erro = $param;
  19. $criteria_erro->add(new TFilter('status', '=', 'E'));
  20. $msmslog_erro = $repository->load($criteria_erro);
  21. }
  22. ?>


Obrigado.

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 (3)


WS

up
NR

https://www.php.net/manual/pt_BR/language.oop5.references.php
"Quando um objeto é enviado por argumento, retornado ou atribuído a outra variável, as variáveis diferentes não são sinônimos: elas armazenam uma cópia do identificador, que aponta para o mesmo objeto."

Ou seja, ao fazer $criteria = $param, modificações em qualquer dessas variáveis vai afetar ambas. Para evitar isso, use o clone:
 
  1. <?php
  2. $criteria = clone $param;
  3. ?>

WS

Oi Nataniel Rabaioli,

dessa eu não sabia...

Muito obrigado pela ajuda...