Ejemplo n.º 1
0
 /**
  * Realiza os joins informados em uma model
  * 
  * Quando chamar o metodo find, o usuario podera informar que uma
  * classe une com a outra, em varios niveis.
  * 
  * Este metodo auxilia para poder fazer as unioes de forma recursiva,
  * para nao ter limite de unioes de classe.
  * 
  * @author Hugo Ferreira da silva
  * @link http://www.hufersil.com.br
  * @param Lumine_Base $base Arquivo que tera as unioes incluidas
  * @param array $config Configuracoes de preferencia do find
  * @return void
  */
 protected function makeJoins(Lumine_Base $base, array $config)
 {
     // se informou o nome da classe
     if (isset($config['class'])) {
         // importamos a classe
         $base->_getConfiguration()->import($config['class']);
         // reflexao
         $ref = new ReflectionClass($config['class']);
         $target = $ref->newInstance();
         // se indicou um alias
         if (isset($config['alias'])) {
             $target->alias($config['alias']);
         }
         // se tiver join dentro dele
         if (!empty($config['join'])) {
             foreach ($config['join'] as $join) {
                 // faz os join's aninhados
                 $this->makeJoins($target, $join);
             }
         }
         // tipo de uniao
         $joinType = isset($config['type']) ? $config['type'] : 'INNER';
         // se indicou os campos de uniao
         if (isset($config['fieldFrom']) && isset($config['fieldTo'])) {
             // se indicou um extra
             if (isset($config['extra'])) {
                 // unimos as classes
                 $base->join($target, $joinType, $target->_getAlias(), $config['fieldFrom'], $config['fieldTo'], $config['extra'], isset($config['extraArgs']) ? $config['extraArgs'] : '');
                 // se nao indicou extra
             } else {
                 // une as classes sem extra
                 $base->join($target, $joinType, $target->_getAlias(), $config['fieldFrom'], $config['fieldTo']);
             }
             // se nao indicou os campos mas indicou extra
         } else {
             if (isset($config['extra'])) {
                 // une as classes sem indicar os campos, mas indica os argumentos extras
                 $base->join($target, $joinType, $target->_getAlias(), null, null, $config['extra'], isset($config['extraArgs']) ? $config['extraArgs'] : '');
                 // une as classes
             } else {
                 $base->join($target, $joinType, $target->_getAlias());
             }
         }
         // se indicou alias
         if (isset($config['alias'])) {
             // muda o selectAs
             $base->selectAs($target, $config['alias'] . '%s');
         }
     }
 }