Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

lukoBR

[Resolvido] CakePHP e while

Recommended Posts

Bem, logico. A unica coisa que você está fazendo é sobrescrever o valor. :P

while($i > '0') { // While defeituoso
                $user[] = $this->User->findAll("id = '". $replies[$i - 1]['Replies']['user_id'] ."'");

                $i--;
        }
                $this->set('user', $user); // Dveria setar um user para cada usuário pego em $user

Deste modo, iria estar tudo em "user".

Não entendi a estrutura ai, por isso pergunto: Para que este while? Ele é realmente necessario?

Ao meu ver você poderia fazer tudo num unico find all, apenas utilizando os conditions.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aquele "indice" desnecessário, na verda é necessario. Pois você está buscando todos (find all). Entao ele tem que ter um indice para cade resultado.

Aí, na view, basta fazer um foreach para percorrer todos os resultados encontrados:

foreach($usuarios_vindo_pelo_metodo_set as $item){
   echo $item['Usuario']['id'];
   echo $item['Usuario']['username'];
   //...
}

Você nunca vai conseguir fazer isso, apenas:

$user['username']
Quer dizer, até existem algumas formas, mas não vale o esforço.

O resultado de find all sempre será neste estilo: $var[x][Model][campo]. Veja exemplos:

$usuarios[0]['Usuario']['username']; // pega o primeiro registro
$usuarios[1]['Usuario']['username']; // pega o segundo registro
$usuarios[2]['Usuario']['username']; // pega o terceiro registro


$produtos[0]['Produto']['fabricante']; // pega o primeiro registro
$produtos[1]['Produto']['fabricante']; //....

E outra coisa. O método findAll está ultrapassado e deixará de existir em futuras versões (se nao me engano ja tiraram na 1.3). Agora utilize apenas o find(). Exemplo:

$this->Usuario->find('all', array('conditions' => array('username' => 'lucaswxp'));
De uma olhada na documentação

----------------------------------

Se você for SEMPRE pegar apenas um registro do DB, utilizar find('first') ao invés de find('all'). Aí ficaria no formato $dados['Model']['campo']

Compartilhar este post


Link para o post
Compartilhar em outros sites

É só fazer um IF o.O

if($aa['TicketsDepartment']['department_id'] == $bb['Ticket']['department_id']){
  // é igual
}
E isso mesmo? (basta adaptar ao seu caso)

Se você quer retornar apenas dados que cumpram esta condição, então coloque-a diretamente no find('all') do controller.

 

OBS: Se o relacionamento for HABTM e você estiver passando com problemas de find's etc (o cake não esta fazendo os relacionamentos para você), sugiro que utilize o HabtmBehavior.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Está muito confuso sua dúvida. Tente explicar novamente, mas, parece apenas ser erro de logica.

Porém, sobre isso:

ele busca como se fosse a url localhost/ticket/view/2 ao invés de localhost/ticket/view/20

Creio que tenha haver com a condição que você está fazendo:

$tickets = $this->Ticket->find("ticket_id = '$id' AND user_id = '". $this->Auth->user('id') ."'");

Se aquele $id for aquele escrito na url (localhost/ticket/view/20). Faz sentido esperar aquele resulta. Averigue isso :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.