menu
Fórum Adianti
menu Menu
Otimizando o carregamento de objetos A partir da versão 1.0.3 do framework, alguns métodos de carga de objetos foram otimizados para não carregar objetos vinculados (Ex: Agregações e Composições). Como exemplo, podemos citar o objeto Pessoa, que pode ter uma composição com Contato. Assim, ao carregarmos o objeto Pessoa, também carregaremos seus contatos. Entretanto em algumas situações, queremos somente os dados de pessoa...
PD
Otimizando o carregamento de objetos  
Fechado
A partir da versão 1.0.3 do framework, alguns métodos de carga de objetos foram otimizados para não carregar objetos vinculados (Ex: Agregações e Composições). Como exemplo, podemos citar o objeto Pessoa, que pode ter uma composição com Contato. Assim, ao carregarmos o objeto Pessoa, também carregaremos seus contatos. Entretanto em algumas situações, queremos somente os dados de pessoa, e não gostaríamos de carregar os objetos vinculados. Para tal, alguns métodos foram otimizados no framework. A seguir veremos como utilizá-los:

Para carregar somente um objeto sem seus agregados, basta passar FALSE como segundo parâmetro do construtor:
  1. <?php
  2. $pessoa = new Pessoa(1FALSE);
  3. ?>


Entretanto, para essa abordagem funcionar, o construtor da classe deve ter seu início como demonstrado a seguir:
  1. <?php
  2. class Pessoa extends TRecord
  3. {
  4.     const TABLENAME 'customer';
  5.     const PRIMARYKEY'id';
  6.     const IDPOLICY =  'serial'// {max, serial}
  7.     
  8.     public function __construct($id NULL$callObjectLoad TRUE)
  9.     {
  10.         parent::__construct($id$callObjectLoad);
  11.         // addAttribute's
  12.     }
  13. }
  14. ?>


Esta mesma técnica pode ser utilizada no carregamento de objetos em lote pelo método TRepository::load(). Ao passar o segundo parâmetro como FALSE para o método load(), estaremos carregando somente os objetos da classe Customer, não seus agregados:

  1. <?php
  2. $repository = new TRepository('Customer');
  3. $criteria = new TCriteria;
  4. //...
  5. $customers $repository->load($criteriaFALSE);
  6. ?>

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


LJ

Precisei usar o loadAgregate com parametro FALSE e não funcionou, fui verificar na lib e ele não aceita o parametro, tive que fazer de maneira manual como esta na página 75 do livro, acrescentando o parametro FALSE na linha
$skill = new Skill($customer_skil->skill_id, FALSE) ;

Se possível acrescentar este parâmetro na próxima versão do framework.
Obrigado