Ah tá .. vc tá usando varias tabelas .. o que tentei explicar era algo +/- assim .. feito de cabeça
https://gist.github.com/felipebastosweb/5646351 Em 24 de maio de 2013 14:15, Douglas J.A.M <[email protected]> escreveu: > Tenho uma paradinha de menus aninhados eternos, talvez lhe interesse ou > outra pessoa, a estrutura é pessoa esta vinculada a uma pessoa pai, tem > ate impressao > > > *Model Menu* > * > * > * *class Model_Menu extends ORM { > .. > protected $_belongs_to = array('pai' => array('model' => 'menu', > 'foreign_key' => 'menu_id')); > > public static function getMenus() { > return ORM::Factory('menu') > ->find_all() > ->as_array('id', 'descricao'); > } > > > *Helper de Impressao* > * > * > * *public static function imprimeMenu(&$saida, array $menus, $pai = 0, > $nivel = 0) { > > $atributos = ''; > if ($pai == 0) > $atributos = ' class="sf-menu"'; > > $i = 0; > > $saida .= str_repeat(" ", $nivel) . "<ul$atributos>" . PHP_EOL; > > if (isset($menus[$pai])) { > foreach ($menus[$pai] as $id => $menu) { > > // imprime o item do menu > $saida .= str_repeat(" ", $nivel + 4); > $saida .= '<li>'; > $saida .= '<a href="' . strtolower($menu['url']) . '" > class="' . ($i == 0 && $nivel == 0 ? 'first' : '') . '">'; > > > if ($menu['exibe_icone'] != "N") > $saida .= '<img src="' . URL::base() . > 'media/imagens/icones/' . strtolower($menu['icone']) . '" /> '; > else > $saida .= '<img src="' . URL::base() . > 'media/imagens/icones/empty.png" /> '; > > if ($menu['exibe_descricao'] != "N") > $saida .= $menu['descricao']; > > if (isset($menus[$id])) { > if ($nivel == 0) > $saida .= '<img src="' . URL::base() . > 'media/imagens/icones/arrow_down_gray.png" /> '; > else > $saida .= '<img src="' . URL::base() . > 'media/imagens/icones/arrow_right_gray.png" /> '; > } > > $saida .= '</a>'; > > // se tiver filhos, entra recursivamente > if (isset($menus[$id])) > self::imprimeMenu($saida, $menus, $id, $nivel + 4); > > $saida .= '</li>' . PHP_EOL; > > $i++; > } > } > > $saida .= str_repeat(" ", $nivel) . '</ul>' . PHP_EOL; > } > > public static function getMenu() { > > $grupo = Helper_USUARIO::getGrupo(); > > if ($grupo->grupomenu->id == null) { > $menus = $grupo->menus; > } else { > $menus = $grupo->grupomenu->menus; > } > > $menus = $menus->where('ativo', '!=', 'N') > ->order_by('ordem', 'asc') > ->order_by('descricao', 'asc') > ->find_all(); > > foreach ($menus as $menu) { > > if ($menu->pai->id == null) > $menu->pai->id = 0; > > $menuArray[$menu->pai->id][$menu->id] = > array('descricao' => $menu->descricao, > 'icone' => $menu->icone, > 'exibe_descricao' => $menu->exibe_descricao, > 'exibe_icone' => $menu->exibe_icone, > 'url' => $menu->url); > } > > $saida = ''; > > if (isset($menuArray)) { > self::imprimeMenu($saida, $menuArray); > } > > return $saida; > } > > []s, > > Douglas J.A.M > [email protected] > (37) 9949-8949 > > > Em 24 de maio de 2013 14:05, Fabyo Guimaraes <[email protected]>escreveu: > > Felipe do jeito que voce falou deu certo em parte funcionou para o pai >> menos para o avo >> >> $accounts = ORM::Factory('filho') >> ->with('pai') >> ->order_by('pai.name', 'ASC') >> >> só que para o avo nao deu certo porque o filho nao tem relação direta com >> o avo e sim com o pai >> entao como ficaria para ordenar o avo? >> tentei isso mas nao deu >> >> $accounts = ORM::Factory('filho') >> ->with('avo') >> ->order_by('avo.name', 'ASC') >> >> Database_Exception [ 1054 ]: Unknown column 'avo.name' in 'order clause' >> >> >> Em 24 de maio de 2013 13:49, Fabyo Guimaraes <[email protected]>escreveu: >> >> Valeu Felipe vou tentar dessa maneira tbm >>> >>> >>> >>> Em 24 de maio de 2013 13:11, felipe bastos <[email protected]>escreveu: >>> >>> Opa, cheguei e nao li tudo .. >>>> >>>> Acho que fez uma arvora de tres niveis: filho, pai e avo ;) >>>> >>>> Imagino que tenha colocado .. >>>> >>>> Model Algo >>>> Belongs_to pai array model Algo >>>> >>>> Sua chave estrangeira de si proprio deve ser pai_id >>>> >>>> Assim, o avo é o pai do pai (obvio) >>>> >>>> $filho .... >>>> $pai ... $filho-pai; >>>> $avo ... $filho-pai-pai; >>>> >>>> Neste caso, vc pode ordenar por pai_id .. >>>> >>>> E para ordenar pelo avo, tem de usar with(campo belongs nome pai) .. >>>> >>>> Fica, order_by("pai.pai_id desc") >>>> >>>> Se ainda nao resolveu, ve se isso resolve. >>>> >>>> Enviado via sp android >>>> Em 24/05/2013 11:53, "Paulo Duarte" <[email protected]> >>>> escreveu: >>>> >>>> hum, foi mau... pai está ligado com avo e não o filho... >>>>> cara, eu nunca teste, mais de repente da para usar with com pai e avo, >>>>> senão tenta com JOIN. >>>>> >>>>> Outra solução é executar a query assim: >>>>> >>>>> $query = " >>>>> SELECT >>>>> f.id >>>>> FROM >>>>> filho f, >>>>> pai p, >>>>> avo a >>>>> WHERE >>>>> f.pai_id = p.id AND >>>>> p.avo_id = a.id >>>>> ORDER BY >>>>> a.nome, >>>>> f.expiration_date, >>>>> LIMIT >>>>> 0, 50"; >>>>> $resultado = DB::query(Database::SELECT,$query)->execute(); >>>>> foreach($resultado as $r) { >>>>> $filho = ORM::Factory('filho',$r['id']); >>>>> echo $filho->name; >>>>> echo $filho->pai->name; >>>>> echo $filho->pai->avo->name; >>>>> } >>>>> >>>>> Você pode para otimizar o tempo já trazer no resultado do select todas >>>>> as informações que quer mostrar, não precisando carregar o filho a cada >>>>> interação... aí fica a seu critério. >>>>> Isso deve resolver. >>>>> >>>>> Abs >>>>> >>>>> >>>>> Atenciosamente, >>>>> >>>>> >>>>> *Paulo Duarte* >>>>> Inteligência Web - Comunicação e Sistemas >>>>> >>>>> Fone: (48) 3028.5141 / 8426.3629 >>>>> E-mail: [email protected] >>>>> Skype: paulo.iw >>>>> >>>>> >>>>> ------------------------------------------------------------------------------------------- >>>>> Aviso de confidencialidade: >>>>> Esta mensagem da Empresa IW - Inteligência Web Comunicação e Sistemas, >>>>> empresa privada, é enviada exclusivamente a seu destinatário e pode conter >>>>> informações confidenciais, protegidas por sigilo profissional. Sua >>>>> utilização desautorizada é ilegal e sujeita o infrator às penas da lei. Se >>>>> você a recebeu indevidamente, queira, por gentileza, reenviá-la ao >>>>> emitente, esclarecendo o equívoco. >>>>> >>>>> >>>>> Em 24 de maio de 2013 11:33, Fabyo Guimaraes >>>>> <[email protected]>escreveu: >>>>> >>>>>> Valeu Paulo e Beto >>>>>> >>>>>> eu tentei usar o with e o order by mas esta dando esse erro >>>>>> >>>>>> ErrorException [ 4 ]: syntax error, unexpected '$filhos' (T_VARIABLE) ~ >>>>>> APPPATH\classes\Controller\Filhos.php [ 20 ] >>>>>> >>>>>> linha 20 : $filhos = ORM::Factory('filho') >>>>>> >>>>>> linha 21 : ->with('avo') >>>>>> >>>>>> >>>>>> >>>>>> Em 24 de maio de 2013 11:19, Paulo Duarte < >>>>>> [email protected]> escreveu: >>>>>> >>>>>>> Cara, o avô está em outra tabela... >>>>>>> se não me engano você tem q fazer algo assim (se for utilizar ORM): >>>>>>> $filhos = ORM::Factory('filho') >>>>>>> ->with('avo') >>>>>>> ->offset(0) >>>>>>> ->limit(50) >>>>>>> ->order_by('filho.expiration_date', 'ASC') >>>>>>> ->order_by('avo.nome', 'ASC') >>>>>>> ->find_all(); >>>>>>> >>>>>>> Atenciosamente, >>>>>>> >>>>>>> >>>>>>> *Paulo Duarte* >>>>>>> Inteligência Web - Comunicação e Sistemas >>>>>>> >>>>>>> Fone: (48) 3028.5141 / 8426.3629 >>>>>>> E-mail: [email protected] >>>>>>> Skype: paulo.iw >>>>>>> >>>>>>> >>>>>>> ------------------------------------------------------------------------------------------- >>>>>>> Aviso de confidencialidade: >>>>>>> Esta mensagem da Empresa IW - Inteligência Web Comunicação e >>>>>>> Sistemas, empresa privada, é enviada exclusivamente a seu destinatário e >>>>>>> pode conter informações confidenciais, protegidas por sigilo >>>>>>> profissional. >>>>>>> Sua utilização desautorizada é ilegal e sujeita o infrator às penas da >>>>>>> lei. >>>>>>> Se você a recebeu indevidamente, queira, por gentileza, reenviá-la ao >>>>>>> emitente, esclarecendo o equívoco. >>>>>>> >>>>>>> >>>>>>> Em 24 de maio de 2013 10:32, Fabyo <[email protected]> escreveu: >>>>>>> >>>>>>>> Oi Pessoal >>>>>>>> >>>>>>>> eu estava usando o recurso do kohana sobre relacionamento de >>>>>>>> tabelas e estava perfeito, ate que eu precisei ordenar um campo da >>>>>>>> tabela e >>>>>>>> deu erro >>>>>>>> estou testando e acho que para ordenar do jeito que eu quero nao >>>>>>>> vou poder usar o modo padrado do kohana >>>>>>>> vou postar um exemplo para voces entenderem melhor >>>>>>>> >>>>>>>> $filhos = ORM::Factory('filho') >>>>>>>> ->offset(0) >>>>>>>> ->limit(50) >>>>>>>> ->order_by('expiration_date', 'ASC') >>>>>>>> ->find_all(); >>>>>>>> >>>>>>>> foreach ($filhos as $filho) >>>>>>>> { >>>>>>>> echo $filho->name; >>>>>>>> echo $filho->pai->name; >>>>>>>> echo $filho->pai->avo->name; >>>>>>>> } >>>>>>>> >>>>>>>> esse exemplo funciona perfeitamente só que precisei ordenar o nome >>>>>>>> do avo ai que eu percebi um problema >>>>>>>> do jeito que eu estou fazendo acima nao tem como certo? >>>>>>>> >>>>>>>> vou ter que fazer de outra maneira? se for isso blz eu consigo >>>>>>>> fazer, mas só queria uma opniao pra saber se tem como fazer continuando >>>>>>>> usando o exemplo acima >>>>>>>> >>>>>>>> valeu >>>>>>>> >>>>>>>> -- >>>>>>>> Você está recebendo esta mensagem porque se inscreveu no grupo >>>>>>>> "Kohana Php" dos Grupos do Google. >>>>>>>> Para cancelar a inscrição neste grupo e parar de receber seus >>>>>>>> e-mails, envie um e-mail para >>>>>>>> [email protected]. >>>>>>>> Para postar neste grupo, envie um e-mail para >>>>>>>> [email protected]. >>>>>>>> Visite este grupo em >>>>>>>> http://groups.google.com/group/kohana-php?hl=pt-BR. >>>>>>>> Para obter mais opções, acesse >>>>>>>> https://groups.google.com/groups/opt_out. >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Você está recebendo esta mensagem porque se inscreveu no grupo >>>>>>> "Kohana Php" dos Grupos do Google. >>>>>>> Para cancelar a inscrição neste grupo e parar de receber seus >>>>>>> e-mails, envie um e-mail para >>>>>>> [email protected]. >>>>>>> Para postar neste grupo, envie um e-mail para >>>>>>> [email protected]. >>>>>>> Visite este grupo em >>>>>>> http://groups.google.com/group/kohana-php?hl=pt-BR. >>>>>>> Para obter mais opções, acesse >>>>>>> https://groups.google.com/groups/opt_out. >>>>>>> >>>>>>> >>>>>>> >>>>>> >>>>>> -- >>>>>> Você está recebendo esta mensagem porque se inscreveu no grupo >>>>>> "Kohana Php" dos Grupos do Google. >>>>>> Para cancelar a inscrição neste grupo e parar de receber seus >>>>>> e-mails, envie um e-mail para [email protected] >>>>>> . >>>>>> Para postar neste grupo, envie um e-mail para >>>>>> [email protected]. >>>>>> Visite este grupo em >>>>>> http://groups.google.com/group/kohana-php?hl=pt-BR. >>>>>> Para obter mais opções, acesse >>>>>> https://groups.google.com/groups/opt_out. >>>>>> >>>>>> >>>>>> >>>>> >>>>> -- >>>>> Você está recebendo esta mensagem porque se inscreveu no grupo "Kohana >>>>> Php" dos Grupos do Google. >>>>> Para cancelar a inscrição neste grupo e parar de receber seus e-mails, >>>>> envie um e-mail para [email protected]. >>>>> Para postar neste grupo, envie um e-mail para >>>>> [email protected]. >>>>> Visite este grupo em >>>>> http://groups.google.com/group/kohana-php?hl=pt-BR. >>>>> Para obter mais opções, acesse >>>>> https://groups.google.com/groups/opt_out. >>>>> >>>>> >>>>> >>>> -- >>>> Você está recebendo esta mensagem porque se inscreveu no grupo "Kohana >>>> Php" dos Grupos do Google. >>>> Para cancelar a inscrição neste grupo e parar de receber seus e-mails, >>>> envie um e-mail para [email protected]. >>>> Para postar neste grupo, envie um e-mail para >>>> [email protected]. >>>> Visite este grupo em http://groups.google.com/group/kohana-php?hl=pt-BR >>>> . >>>> Para obter mais opções, acesse https://groups.google.com/groups/opt_out >>>> . >>>> >>>> >>>> >>> >>> >> -- >> Você está recebendo esta mensagem porque se inscreveu no grupo "Kohana >> Php" dos Grupos do Google. >> Para cancelar a inscrição neste grupo e parar de receber seus e-mails, >> envie um e-mail para [email protected]. >> Para postar neste grupo, envie um e-mail para [email protected] >> . >> Visite este grupo em http://groups.google.com/group/kohana-php?hl=pt-BR. >> Para obter mais opções, acesse https://groups.google.com/groups/opt_out. >> >> >> > > -- > Você está recebendo esta mensagem porque se inscreveu no grupo "Kohana > Php" dos Grupos do Google. > Para cancelar a inscrição neste grupo e parar de receber seus e-mails, > envie um e-mail para [email protected]. > Para postar neste grupo, envie um e-mail para [email protected]. > Visite este grupo em http://groups.google.com/group/kohana-php?hl=pt-BR. > Para obter mais opções, acesse https://groups.google.com/groups/opt_out. > > > -- http://agilesocial.net http://twitter.com/felipebastosweb http://facebook.com/felipebastosweb -- Você está recebendo esta mensagem porque se inscreveu no grupo "Kohana Php" dos Grupos do Google. Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para [email protected]. Para postar neste grupo, envie um e-mail para [email protected]. Visite este grupo em http://groups.google.com/group/kohana-php?hl=pt-BR. Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
