Ejemplo n.º 1
0
 /**
  * Tenta recuperar dinamicamente os campos de identificacao
  * 
  * Para trabalhar com uma estrutura de arvore,
  * e necessario que a tabela tenha:
  * - Uma unica chave primaria
  * - Uma chave estrangeira (FK) que referencie a chave primaria.
  * 
  * Nestas condicoes, Lumine consegue identificar quais sao os campos
  * que compoe a arvore a partir de um dado objeto
  * 
  * @author Hugo Ferreira da Silva
  * @param Lumine_Base $pObj
  * @return array Contendo os campos identificadores
  */
 public static function getTreeFields(Lumine_Base $pObj)
 {
     $pFieldID = null;
     $pFieldParentId = null;
     // pega as definicoes do objeto
     $def = $pObj->_getDefinition();
     // chave primaria
     $pk = null;
     // para cada definicao
     foreach ($def as $name => $item) {
         // se for chave primaria
         if (!empty($item['options']['primary'])) {
             // armazenamos seus dados
             $pk = $item;
             $pk['name'] = $name;
             continue;
         }
         // se for chave estrangeira
         if (!empty($item['options']['foreign'])) {
             // se o campo de linkagem for igual a pk e o nome da classe for o nome do objeto
             if ($item['options']['linkOn'] == $pk['name'] && $item['options']['class'] == $pObj->_getName()) {
                 // encontramos os campos!
                 $pFieldId = $pk['name'];
                 $pFieldParentId = $name;
                 break;
             }
         }
     }
     // se continuar nulo
     if (is_null($pFieldId) && is_null($pFieldParentId)) {
         // dispara excecao
         new Lumine_Exception('Os campos indicativos de arvore devem ser informados!');
     }
     $data['fieldId'] = $pFieldId;
     $data['fieldParentId'] = $pFieldParentId;
     return $data;
 }