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:
Para carregar somente um objeto sem seus agregados, basta passar FALSE como segundo parâmetro do construtor:
<?php$pessoa = new Pessoa(1, FALSE);?>
Entretanto, para essa abordagem funcionar, o construtor da classe deve ter seu início como demonstrado a seguir:
<?phpclass Pessoa extends TRecord{ const TABLENAME = 'customer'; const PRIMARYKEY= 'id'; const IDPOLICY = 'serial'; // {max, serial} public function __construct($id = NULL, $callObjectLoad = TRUE) { parent::__construct($id, $callObjectLoad); // addAttribute's }}?>
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:
<?php$repository = new TRepository('Customer');$criteria = new TCriteria;//...$customers = $repository->load($criteria, FALSE);?>
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