menu
Fórum Adianti
menu Menu
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.                 
  9.                 // 1 criteria
  10.                 $criteria $param;
  11.        
  12.                 $repository = new TRepository('MsMsgLog');            
  13.                 $criteria->setProperty('order' 'data_alt');
  14.                 
  15.                 $msmslog_total $repository->load($criteria);         
  16.                
  17.                 // 2 criteria
  18.                 $criteria_sucesso $param;
  19.                 $criteria_sucesso->add(new TFilter('status''=''S'));                         
  20.                 $msmslog_sucesso $repository->load($criteria_sucesso);
  21.                 // 3 criteria
  22.                 $criteria_erro $param;               
  23.                 $criteria_erro->add(new TFilter('status''=''E')); 
  24.                 $msmslog_erro $repository->load($criteria_erro);                     
  25.             }
  26. ?>


Obrigado.

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 (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...