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:
Entretanto, para essa abordagem funcionar, o construtor da classe deve ter seu início como demonstrado a seguir:
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:
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:
- <?php
- class 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