/** * 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'); } } }