No seu model usuarios pode ter uma atributo listaamigos, por exemplo. Ai vc
faria uma busca por usuarios, percorreria o resultset e dentro do laço do
resultset adicionaria os amigos na lista
ex:
<?php
class UsuarioModel extends Model {
var $id;
var $nome;
var $email;
var $lista_amigos;
function UsuarioModel() {
parent::Model();
}
function getAll(){
$lista_usuarios = array();
$usuarios = $this->db->get('usuarios');
foreach($usuarios->result() as $user) {
// faz a consulta pra pegar os amigos
//$this->db->join('blablabla', 'blablabal');
$user->lista_amigos = // $this->db->get('tabela_amigos'); //
coloca o resultado dos amigos aqui
array_push($lista_usuarios, $user); // popula a lista de
usuarios
}
return $lista_usuarios;
}
}
?>
Pergunto aos mais experientes se isso é gambiarra? se tem como fazer mais
bonito/melhor?
2009/2/3 Eric Saboia (Fortes Informatica) <[email protected]>
> Sub Select mais rápido e correto?
> Da onde você tirou isso?
>
> ----- Original Message -----
> *From:* Beto <[email protected]>
> *To:* CodeIgniter Brasil <[email protected]>
> *Sent:* Tuesday, February 03, 2009 1:19 PM
> *Subject:* Re: [CodeIgniter] dúvida sobre práticas
>
> Nao teria como vcfazer toda consulta via banco, com sub-select ? como todos
> falaram deve ser mais rapido e correto ;)
>
> []´s
>
> - - - - - - - - - - - - - - - - - - - - -
> Luiz Alberto S. Ribeiro [ Beto ]
> http://beto.euqueroserummacaco.com
>
>
> 2009/2/3 Bruno Barros <[email protected]>
>
>> O controller está puxando o View principal e chamando o Model para
>> gerar a listagem de usuários.
>>
>> Vamos supor que cada usuário (cada registro lido) eu tivesse que gerar
>> uma outra lista de usuários que são amigos dele.
>> Então eu teria que fazer uma nova pesquisa para gerar outra sub-listagem.
>>
>> Minha dúvida é como eu mando esta informação para o View. Se monto
>> toda a tabela fora, ou se insiro uma linha que faz a segunda pesquisa
>> e continua a fazer o segundo foreach.
>>
>> Ex:
>> <?php
>> foreach($listaItens as $row):
>>
>> $nome = $row['nome'];
>>
>> // faz a segunda pesquisa. esta listagem tem uma
>> formatação específica
>> $lista_amigos= $this->meu_model->gera_lista($row['id']);
>>
>> ?>
>> <tr>
>> <td><?=$nome?></td>
>> <td><?=$lista_amigos?></td>
>> <td> </td>
>> <td> </td>
>> <td> </td>
>> </tr>
>> <?php
>> endforeach;
>> ?>
>>
>>
>> 2009/2/3 Vinicius Cruz <[email protected]>:
>> > Isso tá me cheirando pog.. =D
>> >
>> > A primeira opção limou a função do controller. Me parece que um JOIN já
>> > retornaria o status do usuário, não?
>> >
>> > Vinicius
>> >
>> > 2009/2/3 Bruno Barros <[email protected]>
>> >>
>> >> Pessoal,
>> >> tenho uma dúvida sobre práticas.
>> >>
>> >> Tenho que gerar uma tabela no View, e cada linha desta tabela precisa
>> >> de informações específicas, como o status deste usuários etc.
>> >> Então cada linha retornada do BD gera outra pesquisa.
>> >>
>> >> É melhor eu colocar dentro da View:
>> >> <?php
>> >> foreach($listaItens as $row):
>> >>
>> >> $status=
>> $this->meu_model->status_do_usuario($row['id']);
>> >> // faz
>> >> outra requisição no BD
>> >> ?>
>> >> <tr>
>> >> <td><?=$nome?></td>
>> >> <td><?=$status?></td>
>> >> </tr>
>> >> <?php
>> >> endforeach;
>> >> ?>
>> >>
>> >> ... ou ...
>> >>
>> >> Gerar toda a tabela dentro do Model e depois descarregar tudo na View?
>> >>
>> >>
>> >> --
>> >> []'s
>> >> Bruno Barros
>> >> [email protected]
>> >>
>> >> _______________________________________________
>> >> Lista mailing list
>> >> [email protected]
>> >> http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br
>> >
>> >
>> > _______________________________________________
>> > Lista mailing list
>> > [email protected]
>> > http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br
>> >
>> >
>>
>>
>>
>> --
>> []'s
>> Bruno Barros
>> [email protected]
>>
>> _______________________________________________
>> Lista mailing list
>> [email protected]
>> http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br
>>
>
> ------------------------------
>
> _______________________________________________
> Lista mailing list
> [email protected]
> http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br
>
>
> _______________________________________________
> Lista mailing list
> [email protected]
> http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br
>
>
--
Reginaldo Sousa | Desenvolvedor web
[email protected], [email protected]
(21) 8728-1850
_______________________________________________
Lista mailing list
[email protected]
http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br